redis-使用-pipeline大批量提交提高性能
pipeline
传统我们redis 发送10万个请求,requset-response 请求响应,需要等待一个请求发送到redid redis成功处理并响应才返回
我们线上有一块儿代码 要10多秒 才能响应,后面发现大批量redis查询 改为管道就变成1秒内
性能对比测试
public static void main(String[] args) throws Exception { Jedis conn = new Jedis("127.0.0.1", 6379); testMulti(conn); testPipeline(conn); test(conn); } public static void testMulti( Jedis conn){ conn.del("testMulti"); Long start=System.currentTimeMillis(); Transaction t= conn.multi(); for(int i=0;i<100000;i++){ t.sadd("testMulti",String.valueOf(i)); } t.exec(); Long end=System.currentTimeMillis(); System.out.println("testMulti耗时"+(end-start)+"毫秒"); } public static void testPipeline( Jedis conn){ conn.del("testPipeline"); Long start=System.currentTimeMillis(); Pipeline pipeline=conn.pipelined(); for(int i=0;i<100000;i++){ pipeline.sadd("testPipeline",String.valueOf(i)); } pipeline.syncAndReturnAll(); Long end=System.currentTimeMillis(); System.out.println("testPipeline耗时"+(end-start)+"毫秒"); } public static void test( Jedis conn){ conn.del("test"); Long start=System.currentTimeMillis(); for(int i=0;i<100000;i++){ conn.sadd("test",String.valueOf(i)); } Long end=System.currentTimeMillis(); System.out.println("test耗时"+(end-start)+"毫秒"); }
输出
testMulti耗时380毫秒
testPipeline耗时360毫秒
test耗时4655毫秒
如果改为100万次 multi拿结果的时候会超时
疑惑
网上说是一直发非事物处理,但是并不等待结果,按理说,发送后 get应该是修改的值,但是我测试没有调用syncAndReturnAll redis并没有修改
Jedis conn = new Jedis("127.0.0.1", 6379); Pipeline pipeline= conn.pipelined(); pipeline.set("test5","6"); Thread.sleep(10000);//这个时候另外一个线程去读取 test5是null pipeline.syncAndReturnAll();//这一句执行完后 get test5获取到6
解惑
redis 管道是需要客户端和服务端的支持,服务端需要能够接受批量的命令并处理,客户端 需要将命令写入缓冲区最后一次发送,
Jedis客户端缓存是8192,超过该大小则刷新缓存,或者直接发送
注意事项
多个大批量 尽量分批提交(如10万 1万一批的提交),避免超时
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!