当前位置: 首页 > 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.dtcms.com/a/318106.html

相关文章:

  • Typescript入门-类型讲解
  • django object.create之后返回id
  • 【音视频】ALSA详细介绍
  • 从单枪匹马到联盟共生:白钰玮的IP破局之路​
  • 最新windows安装git(保姆及教程)
  • Python 高阶函数:用函数玩出花样
  • gpt-oss openai开源大模型
  • MCP 协议:AI 时代的 “万能转接头”,从 “手动粘贴” 到 “万能接口”:MCP 协议如何重构 AI 工具调用规则?
  • C++11之智能指针
  • springboot项目justAuth扩展第二个小程序
  • clock_adjtime、clock_getres、clock_gettime、 clock_nanosleep、clock_settime 系统调用及示例
  • 【面试八股总结】线程/进程同步问题
  • 概率/期望 DP Let‘s Play Osu!
  • 【数论】素数
  • Vue3入门到精通: 1.2 Vue3响应式系统深度解析
  • go与grpc
  • 网站、域名、IP在什么场景下需要备案
  • Linux之Shell脚本基本语法
  • InfluxDB 集群部署与高可用方案(二)
  • 基于vue的财务管理系统/基于php的财务管理系统
  • 02.【数据结构-C语言】顺序表(线性表概念、顺序表实现:增删查、前向声明、顺序表实现通讯录项目:增删改查、通讯录数据导入及保存到本地文件)
  • <form> + <iframe> 方式下载大文件的机制
  • Python 通过Playwright+OpenCV破解滑动验证码 实例
  • 【Python】命令行工具实现监控ctrl+c与运行时长终止任务
  • 2024学年云南省职业院校技能大赛 “信息安全管理与评估”赛项 比赛样题任务书
  • FreeRTOS临界资源保护方法
  • 商派小程序商城(小程序/官网/APP···)的范式跃迁与增长再想象
  • android NDK 报错日志解读和还原报错方法名
  • Mybatis的高级特性
  • 【自动化运维神器Ansible】playbook核心组件之tags深度解析