Redis中PipeLine使用(二)---批量get与批量set

Redis批量操作详解及性能分析 在之前的文章中,我们对redis批量处理指令mget进行了压测并分析了性能瓶颈,显然通过mget批量执行指令可以节约网络连接和数据传输开销,在高并发场景下可以节约大量系统资源。本文中,我们更进一步,比较一下redis提供的几种批量执行指令的性能。1.为什么需要批量执行redis指令众所周知,Redis协议采取的是客户端-服务器方式,即在一次round trip中,客户端发送一条指令,服务端解析指令... 阅读详情

 

Kevin.Yang 2015-11-04 17:28:47  27769  收藏 2
展开
批量查询的相关问题总结

再做测试之前首先向redis中批量插入一组数据

1-->1
2-->2
3-->3
4-->4
5-->5
6-->6
1
2
3
4
5
6
现在批量get数据

for (Entry<String,String> entry :map.entrySet())     
        {
             pipe.get(entry.getKey().getBytes());
        }
        List<Object> list=pipe.syncAndReturnAll();

        for(Object o:list){
            byte[] tmp=(byte[])o;
            System.out.println("---->"+new String(tmp));
        }
1
2
3
4
5
6
7
8
9
10
其打印结果是:

然而这并不是我们想要的,那怎样才能知道打印的这个value对应的key呢?

这样的应用场景很多,我们首先批量从redis get数据出来,然后将get的数据与内存中的数据进行运行在批量写入数据库!

这是需要引入一个HashMap

HashMap<String, String> map=new HashMap<String, String>();
        map.put("1","1");
        map.put("2","2");
        map.put("3","3");
        map.put("4","4");
        map.put("5","5");
        map.put("6","6");

        Pipeline pipe=redis.pipelined();

        HashMap<byte[], Response<byte[]>> newMap=new HashMap<byte[], Response<byte[]>>();

        for (Entry<String,String> entry :map.entrySet()) {
            newMap.put(entry.getKey().getBytes(), pipe.get(entry.getKey().getBytes()));
        }

        pipe.sync();

        for (Entry<byte[], Response<byte[]>> entry :newMap.entrySet()) {
            Response<byte[]> sResponse=(Response<byte[]>)entry.getValue();
            System.out.println(new String(entry.getKey())+"-----"+new String(sResponse.get()).toString());
        }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22


批量get之后与内存的数据想加再批量set

HashMap<String, String> map=new HashMap<String, String>();
        map.put("1","1");
        map.put("2","2");
        map.put("3","3");
        map.put("4","4");
        map.put("5","5");
        map.put("6","6");

        Pipeline pipe=redis.pipelined();

        HashMap<byte[], Response<byte[]>> newMap=new HashMap<byte[], Response<byte[]>>();

        for (Entry<String,String> entry :map.entrySet()) {
            newMap.put(entry.getKey().getBytes(), pipe.get(entry.getKey().getBytes()));
        }

        pipe.sync();

        for (Entry<byte[], Response<byte[]>> entry :newMap.entrySet()) {
            Response<byte[]> sResponse=(Response<byte[]>)entry.getValue();
            long temp=Long.valueOf(Long.parseLong(map.get(new String(entry.getKey())))+Long.parseLong(new String(sResponse.get()).toString()));
            map.put(new String(entry.getKey()), Long.toString(temp));
        }

        for (Entry<String,String> entry :map.entrySet()) {
           pipe.set(entry.getKey().getBytes(), entry.getValue().getBytes());
        }
        pipe.sync();
————————————————
版权声明:本文为优快云博主「Kevin.Yang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/ouyang111222/article/details/49640899

九、Redis 并发控制:单线程原理与 Pipeline 批量优化 然而,在高并发场景下,如何优化 Redis 的并发控制,提升批量操作性能,是开发者需要关注的重要问题。Redis 在 6.0 版本之前,所有操作(包括网络 I/O 和命令执行)都在。的,即所有命令在同一个线程内依次执行。,可以极大提升 Redis 在高并发环境下的性能!在 Redis 传统模式下,每个命令都需要。,减少网络开销和 Redis 内部切换。,帮助你更高效地使用 Redis。交给多个线程,而核心命令仍然是。,减少网络延迟,提高执行效率。Redis 的核心命令处理是。很多人误以为单线程意味着。 阅读详情

相关推荐

55 Redis Pipeline批量操作深度实践

在企业级应用中,我们经常需要批量操作Redis数据。如果使用传统方式,每次操作都会产生一次网络往返(RTT, Round-Trip Time),这会成为严重的性能瓶颈。常见批量操作场景:传统方式的问题: 性能分析: 性能问题总结:Pipeline(管道)是Redis提供的批量操作机制,允许客户端一次发送多条命令,服务器批量执行后一次性返回所有结果。核心特点:Pipeline执行流程: 关键优化点:性能对比测试:理论计算: 2.4 Pipeline的限制与注意事项 Pipeline不是万能的:限制1: 非原子

云上凯歌 486

如何批量获取redis数据呢?

背景 redis作为我们接口开发中的首选缓存,当从redis中每次获取一个key的value时,接口响应时间上一般是没啥问题的,但是当需要获取多个key的value时,一般需要使用mget等批量获取的方法。但是当value是以压缩格式写入到redis中的时候,还可以直接套用原来的方法吗?最近在一个接口的开发过程中遇到了这个问题,特此记录下解决方法。 先复习下redis、jedis和redisTemplate之间的关系:Redis是用ANSI C写的一个基于内存的Key-Value数据库,而Jedis是R

B_e_a_u_tiful1205的博客 7944

Redis 可视化工具 RedisInsight 的保姆级安装以及使用(最新)

Redis 可视化工具 RedisInsight 的保姆级安装以及使用(最新)

一名全栈小白的博客 1万+

redis批量get和set

//批量set数据 redisTemplate.executePipelined(new RedisCallback<String>() { @Override public String doInRedis(RedisConnection connection) throws DataAccessException { for (int i=0;i<list..

weixin_43820434的博客 2331

从3D相机数据到三维模型:Halcon实战深度图、亮度图与点云转换全流程

本文详细解析了如何利用Halcon将3D相机采集的深度图、亮度图转换为三维点云模型的完整流程。通过实战案例分享,涵盖数据格式处理、点云生成方法(SDK接口与纯Halcon实现)、三维模型可视化优化等关键技术,帮助工程师解决工业检测中的实际难题,提升三维重建精度与效率。

weixin_42525005的博客 397

Keil MDK安装NRF52832开发环境全攻略(附系统时间错误解决方案)

本文详细介绍了如何使用Keil MDK搭建NRF52832开发环境,包括基础软件安装、项目配置关键步骤以及常见问题解决方案。特别针对系统时间错误导致的编译失败问题提供了实用解决方法,帮助开发者快速上手NRF52832开发。

weixin_29168153的博客 506

Redis 批量操作之pipeline

业务场景 最近项目中场景需要get一批key的value,因为redis的get操作(不单单是get命令)是阻塞的,如果循环取值的话,就算是内网,耗时也是巨大的。所以想到了redis的pipeline命令。 pipeline简介 非pipeline:client一个请求,redis server一个响应,期间client阻塞 Pipeline:redis的管道命令,允许client将多个请求依次发给服务器(redis的客户端,如jedisCluster,lettuce等都实现了对pipeline的封

mzr122的专栏 2051

百条网络工程师基础面试题(不断更新)

1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。 3)什么是骨干网? 骨干网络是集中的基础设施,旨在将不同的路由和数据分发到各种网络。它还处理带宽管理和各种通道。 4)什么是 LAN? LAN 是局域网的缩写。它是指计算机与位于小物理位置的其他网络设备之间的连接。 5)什么是节点? 节点是指连接发生的点。它可以是作为网络一部分的计算机

weixin_42728126的博客 2万+

一文教你Redis Cluster批量操作的所有姿势(附代码实操)

Redis Cluster 批量操作Key 技巧,用多种方式提供了批量操作的思路,各位可以根据自己的业务量级来选择合适的方法。

weixin_45563088的博客 2092

020、Sensor 供电设计:AVDD、DVDD、IOVDD 的上电时序与纹波要求

本文总结了图像传感器(Sensor)供电设计中的关键要点与常见问题:1. 三路供电特性差异:AVDD(模拟供电)对纹波最敏感(通常<30mVpp),DVDD需应对大电流瞬态变化,IOVDD需满足MIPI接口电压稳定要求。2. 上电时序至关重要,应遵循"模拟→数字→IO"的启动顺序,时序偏差可能导致初始化失败。3. 纹波控制需合理选择电容组合(如10μF+0.1μF),注意布局走线及电容ESR/ESL特性。4. 调试建议使用示波器多通道测量时序和纹波,重点关注传感器启动瞬间的电源特性。5. 经验教训包括预留设

sundong_81的博客 531

Cadence PSpice 仿真0:绘制电路图方法图文教程

在使用PSpice进行电路的仿真时,首先需要使用带有PSpice模型的元器件来绘制电路图,本文简单介绍进行电路图绘制是常用的几种需要掌握的方法,以满足PSpice仿真绘制简单电路图所用。

fydar的博客 4707

Redis100篇 - Redis的Pipeline进阶 批量操作的性能极限

本文深入探讨了Redis Pipeline技术在高并发场景下的性能优化策略。通过对比普通模式和Pipeline模式的性能差异(10万次SET操作从8.2秒降至0.35秒),揭示了网络往返延迟(RTT)对Redis性能的关键影响。 文章详细解析了Pipeline的工作原理,强调其通过RESP协议实现命令批量发送和响应接收的特性,并指出其非原子性但顺序执行的特性。同时提供了完整的Java+Spring Boot+Lettuce实现方案,包括: 项目Maven依赖配置 Redis连接池参数设置 批量写入用户数据的

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Triton server的部署、构建、backend插件机制代码梳理、模型加载、自定义C++backend流程

Triton inference server的部署、构建、backend机制代码详细梳理、模型加载过程、自定义C++backend流程.

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 474

redis-redisTemplate模糊匹配删除 通过key模糊删除,批量删除,批量查询,批量GET,批量设置相关数据

redis-redisTemplate模糊匹配删除 前几天需要一个模糊删除redis中key的功能, 没有多想, 直接         String key = "noteUserListenedPoi:*"; redisTemplate.delete(key); LOGGER.info("redis中用户收听历史被清空"); 结果发现不行...

zhuchunyan_aijia的博客 4万+

Android 13 SPRD 源码默认打开多用户实际无效果问题修复

【代码】Android 13 SPRD 源码默认打开多用户实际无效果问题修复。

m0_60898338的博客 449

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Redis 性能优化实战:慢查询、Pipeline、批量操作与热点 Key 探测

本文深入探讨 Redis 性能优化的四大关键领域:慢查询分析、Pipeline 批量处理、批量操作优化以及热点 Key 探测。通过实战案例和最佳实践,帮助开发者识别 Redis 性能瓶颈,掌握优化技巧,提升系统整体响应速度与稳定性。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 850

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

redistemplate 批量读取_redis常用操作(管道(pipeline)实现批量操作,Redis模糊匹配等)...

试了很多种错误的方法,现将自己测试成功redis管道pipeline批量操作的方法和redis常用操作以及一些关于springboot+redis的概念分享给大家开发环境准备:spring boot 2.x使用RedisTemplate 操作springboot项目pom引入redis依赖:org.springframework.bootspring-boot-starter-weborg.spr...

weixin_39948824的博客 3413

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

redis:Redis Pipeline深度解析

Redis Pipeline(管道)是一种批量执行命令的优化机制,其核心价值在于。传统模式下,客户端执行一条命令需要经历"发送请求-等待响应"的往返过程,而Pipeline允许客户端一次性发送多条命令,服务器批量处理后一次性返回结果,从而显著降低网络延迟带来的性能损耗。

weixin_43290370的博客 1272

Redis Pipeline技术

Redis Pipeline通过批量执行命令减少网络往返次数,提高性能和吞吐量。它降低了延迟,简化了客户端代码,同时保证了操作的原子性。使用Jedis库,可以轻松在Java中实现Redis Pipeline。示例代码展示了如何连接到Redis服务,获取Pipeline实例,添加命令,执行并处理结果。在生产环境中,需优化Jedis配置以提高性能和可靠性。

技术铺掌柜 1416

Redis批量操作优化实战:MSET/MGET与Pipeline的深度对比与选择指南

在高并发场景下,Redis作为关键的内存数据库,其性能优化一直是开发与运维团队关注的核心。批量操作能够显著减少网络通信次数,从而降低延迟并提升吞吐量,是优化Redis性能的重要手段。通过将多个操作合并为单次请求,可以避免频繁的网络往返带来的开销,尤其在大规模数据读写场景中效果更为明显。MSET和MGET是Redis内置的批量命令,允许一次性设置或获取多个键值对。MSET通过原子性操作保证所有键值要么全部成功,要么全部失败,避免了部分失败导致的数据不一致问题。

zuiyuelong的博客 1146

Redis 事务机制:Pipeline、ACID、Lua脚本

本文介绍了Redis的三种批处理与原子操作机制:Pipeline、事务和Lua脚本。Pipeline通过批量发送命令提升网络效率,但不具备事务性;Redis事务通过MULTI/EXEC命令实现乐观锁机制,但不支持回滚;Lua脚本则能完全保证原子性,通过EVAL/EVALSHA执行。

平平无奇的小甜菜 1472

Redis基础篇004_Redis Pipeline流水线详解

Redis是一个高性能的键值存储数据库,通常用于缓存、会话管理、消息队列等场景。在实际应用中,我们经常需要向Redis发送多个命令。如果逐个发送这些命令,网络延迟会成为性能瓶颈。为了解决这个问题,Redis提供了Pipeline(流水线)功能。

ChineHe的博客 835

Redis 事务与 Pipeline:批量操作的正确姿势

Lettuce、Redisson 都有对应的 pipeline / batch API,思路一样:攒命令、一次 flush、再读回复。延迟 1ms 的机房里,1000 条命令从约 1 秒变成几毫秒,这才是 Pipeline 存在的理由。Redis 把这些排除在事务模型之外——内存数据库,命令要么能执行,要么是你调用姿势不对。Jedis、Lettuce、go-redis 里的事务 API,底层都是这么干的。执行期间,别的客户端的命令插不进来。的手感:Pipeline 是给程序用的,不是给手敲用的。

代码构筑系统,架构驱动未来 —— 一名深耕 Java 技术的实践者 301

redis的pipeline使用

1.pipeline原理 redis基本语法:https://www.cnblogs.com/xiaonq/p/7919111.html redis四篇:https://www.cnblogs.com/xiaonq/category/1544586.html 1.1 redis发送数据原理 1.Redis是建立在TCP协议基础上的CS架构,客户端client对redis server采取请求响应的方式交互。 2.一般来说客户端从提交请求到得到服务器相应,需要传送两个tcp报文。 3.设想这样的一个场景,

weixin_51118163的博客 229
上一篇: 允许master节点部署pod
下一篇: RedisCluster使用pipeline批量读取数据
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值