从redis中获取各个属性值拼装成对象列表的优化

2023-11-25 01:45

本文主要是介绍从redis中获取各个属性值拼装成对象列表的优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我的目标是根据名称,从Redis缓存中获取一些值,并将它们封装到KnowBaseArgDto对象中,然后将这些对象添加到一个列表中返回给前端。

这是直来直去,通俗易懂,优化之前的代码:

List<KnowBaseArgDto> list = new ArrayList<>();AppKnowledgeRequestBody requestBody = new AppKnowledgeRequestBody();String key_prefix = CacheConsts.REDIS_CACHE_PREFIX + CacheConsts.APP_USERTOKEN_KNOW_KEY_PREFIX;String[] baseNameArray = (null != baseNames && baseNames.length() > 0) ? baseNames.split(",") : null;if(baseNameArray == null) {return list;}for(String baseName : baseNameArray) {String temperature = redisTemplate.opsForValue().get(key_prefix + baseName + ":USED:temperature");String top_k = redisTemplate.opsForValue().get(key_prefix + baseName  + ":USED:top_k");String score_threshold = redisTemplate.opsForValue().get(key_prefix + baseName  + ":USED:score_threshold");KnowBaseArgDto baseArgDto = new KnowBaseArgDto();baseArgDto.setBaseName(baseName);baseArgDto.setTemperature(temperature==null?Float.toString(requestBody.getTemperature()):temperature);baseArgDto.setTop_k(top_k==null?requestBody.getTop_k().toString():top_k);baseArgDto.setScore_threshold(score_threshold==null?Float.toString(requestBody.getScore_threshold()):score_threshold);list.add(baseArgDto);}return list;

针对代码可以进行如下方式的优化:

  • 减少Redis调用:Redis的pipeline功能来一次性获取所有的键值对,而不是为每个键分别调用get,这将减少与Redis的通信次数,从而提高性能;
  • 优化缓存键的组装:可以考虑使用一个循环来组装和获取所有的值,而不是为每个属性写单独的代码;

优化后的代码:

List<KnowBaseArgDto> list = new ArrayList<>();AppKnowledgeRequestBody requestBody = new AppKnowledgeRequestBody();String key_prefix = CacheConsts.REDIS_CACHE_PREFIX + CacheConsts.APP_USERTOKEN_KNOW_KEY_PREFIX;String[] baseNameArray = (null != baseNames && baseNames.length() > 0) ? baseNames.split(",") : null;if (baseNameArray == null) {return list;}// 准备要获取的Redis键列表List<String> keys = new ArrayList<>();for (String baseName : baseNameArray) {keys.add(key_prefix + baseName + ":USED:temperature");keys.add(key_prefix + baseName + ":USED:top_k");keys.add(key_prefix + baseName + ":USED:score_threshold");}// 使用pipeline一次性获取所有的值List<String> values = redisTemplate.opsForValue().multiGet(keys);for (int i = 0; i < baseNameArray.length; i++) {String baseName = baseNameArray[i];KnowBaseArgDto baseArgDto = new KnowBaseArgDto();baseArgDto.setBaseName(baseName);int index = i * 3; // 因为我们每次添加了三个键baseArgDto.setTemperature(values.get(index) == null ? Float.toString(requestBody.getTemperature()) : values.get(index));baseArgDto.setTop_k(values.get(index + 1) == null ? requestBody.getTop_k().toString() : values.get(index + 1));baseArgDto.setScore_threshold(values.get(index + 2) == null ? Float.toString(requestBody.getScore_threshold()) : values.get(index + 2));list.add(baseArgDto);}return list;}

这篇关于从redis中获取各个属性值拼装成对象列表的优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/422930

相关文章

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils