从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

相关文章

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

HTML5 data-*自定义数据属性的示例代码

《HTML5data-*自定义数据属性的示例代码》HTML5的自定义数据属性(data-*)提供了一种标准化的方法在HTML元素上存储额外信息,可以通过JavaScript访问、修改和在CSS中使用... 目录引言基本概念使用自定义数据属性1. 在 html 中定义2. 通过 JavaScript 访问3.

Redis客户端工具之RedisInsight的下载方式

《Redis客户端工具之RedisInsight的下载方式》RedisInsight是Redis官方提供的图形化客户端工具,下载步骤包括访问Redis官网、选择RedisInsight、下载链接、注册... 目录Redis客户端工具RedisInsight的下载一、点击进入Redis官网二、点击RedisI

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

python中列表list切分的实现

《python中列表list切分的实现》列表是Python中最常用的数据结构之一,经常需要对列表进行切分操作,本文主要介绍了python中列表list切分的实现,文中通过示例代码介绍的非常详细,对大家... 目录一、列表切片的基本用法1.1 基本切片操作1.2 切片的负索引1.3 切片的省略二、列表切分的高