当前位置: 首页 > news >正文

Pipeline功能实现Redis批处理(项目批量查询点赞情况的应用)

在本项目中代码实现很简单,但因为第一次使用,所以专门写一下方便复习

@Override
public Set<Long> isBizLiked(List<Long> bizIds) {// 1.获取登录用户idLong userId = UserContext.getUser();// 2.查询点赞状态List<Object> objects = redisTemplate.executePipelined((RedisCallback<Object>) connection -> {//将通用的Redis连接对象转换为专门处理字符串类型的Redis连接对象StringRedisConnection src = (StringRedisConnection) connection;for (Long bizId : bizIds) {String key = RedisConstants.LIKES_BIZ_KEY_PREFIX + bizId;src.sIsMember(key, userId.toString());}return null;});// 3.返回结果return IntStream.range(0, objects.size()) // 创建从0到集合size的流.filter(i -> (boolean) objects.get(i)) // 遍历每个元素,保留结果为true的角标i.mapToObj(bizIds::get)// 用角标i取bizIds中的对应数据,就是点赞过的id.collect(Collectors.toSet());// 收集
}

在截图所示的代码中,用到了redis管道工具

整体理一遍:

首先调用executePipelined

1. executePipelined方法内部将connection设置为管道模式
2. connection仍然是同一个连接对象
3. 但在管道模式下,命令不会立即发送,而是被缓存起来
4. 当RedisCallback执行完毕后,所有缓存的命令一起发送

重点:

调用 executePipelined()后管道开启,然后执行RedisCallback中的代码(收集所有的命令),收集完成后管道就自动关闭了
管道自动关闭后,收集到的命令一次性发送给Redis服务器,服务器再批量执行命令,最后批量返回结果并存储到List<Objects>中

然后是对代码中return null;的解释:

null是RedisCallback函数的返回值,而我们所需要查询的数据在执行命令后就存储到List<Objects>中,以供后续使用

http://www.lryc.cn/news/612047.html

相关文章:

  • 数据结构——双向链表及makefile
  • NineData 新增支持 AWS ElastiCache 复制链路
  • windows搬运文件脚本
  • 互斥锁与条件变量
  • 自然语言处理基础—(1)
  • 深入理解 C++ 中的stdpriority_queue:从原理到实战的高效优先级管理
  • ssm复习
  • 【嵌入式电机控制#26】BLDC:三相模拟采集
  • springboot项目前后端通用下载方法、问题和解决方案
  • PyTorch生成式人工智能(26)——使用PyTorch构建GPT模型
  • AVDTP Media Packet 传输全流程解析:从 SDP 到连接终止
  • 基于AntDesign二次封装table组件
  • 思途AOP学习笔记 0806
  • nginx代理出https,request.getRequestURL()得到http问题解决
  • 界面规范的其他框架实现-列表-layui实现
  • TypeError: crypto$2.getRandomValues is not a function
  • 北大、蚂蚁三个维度解构高效隐私保护机器学习:前沿进展+发展方向
  • AlexNet训练和测试CIFAR10
  • Python金融分析:从基础到量化交易的完整指南
  • 如何定位一个高并发场景下API响应时间从200ms突增到2s的问题
  • 生成模型实战 | Transformer详解与实现
  • 需求链路追踪
  • centos配置java环境变量
  • SpringCloud -- elasticsearch(二)
  • MonoFusion 与 Genie 3
  • 如何快速掌握大数据技术?大四学生用Spark和Python构建直肠癌数据分析与可视化系统
  • Apollo中三种相机外参的可视化分析
  • 「iOS」————单例与代理
  • iOS 文件管理实战指南 查看 App 数据与系统日志的完整方法
  • Python虚拟环境完全指南:pyenv vs venv 在macOS上的使用详解