本篇文章小编给大家分享一下SpringBoot整合Redis管道代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
1. Redis 之管道(pipeline)
执行一个Redis命令,Redis客户端和Redis服务器就需要执行以下步骤:
客户端发送命令到服务器;
服务器接受命令请求,执行命令,产生相应的结果;
服务器返回结果给客户端;
客户端接受命令的执行结果,并向用户展示。
Redis命令所消耗的大部分时间都用在了发送命令请求和接收命令结果上面,把任意多条Redis命令请求打包在一起,然后一次性地将它们全部发送给服务器,而服务器则会把所有命令请求都处理完毕之后,一次性地将它们的执行结果全部返回给客户端。
注意事项:
Redis服务器并不会限制客户端在管道中包含的命令数量,但是却会为客户端的输入缓冲区设置默认值为1GB的体积上限:当客户端发送的数据量超过这一限制时,Redis服务器将强制关闭该客户端。因此最好不要一下把大量命令或者一些体积非常庞大的命令放到同一个管道中执行。
除此之外,很多客户端本身也带有隐含的缓冲区大小限制,如果你在使用流水线特性的过程中,发现某些流水线命令没有被执行,或者流水线返回的结果不完整,那么很可能就是你的程序触碰到了客户端内置的缓冲区大小限制。
2. SpringBoot 整合 Redis 管道实例
使用单个的 increment 命令,处理 200w个key:
public class RedisPipelineStudy extends BaseTest { @Autowired private StringRedisTemplate stringRedisTemplate; private static final String PREFIX = "test0:"; @Test public void test() { StopWatch stopWatch = new StopWatch(); stopWatch.start("test0"); for (int times = 0; times < 2; times++) { for (int i = 0; i < 1000000; i++) { stringRedisTemplate.opsForValue().increment(PREFIX + i, 1L); } } stopWatch.stop(); System.out.println(stopWatch.prettyPrint()); } }
耗时如下所示:是 12 位 ,单位ns
使用管道 incrBy 处理 200w个key,每次打包300条命令发送给服务器,如下所示:
public class RedisPipelineStudy extends BaseTest { @Autowired private StringRedisTemplate stringRedisTemplate; private static final String PREFIX = "test1:"; @Test public void test() { StopWatch stopWatch = new StopWatch(); stopWatch.start("test1"); ListrecordList = new ArrayList<>(); for (int times = 0; times < 2; times++) { for (int i = 0; i < 1000000; i++) { try { recordList.add(i); if (recordList.size() > 300) { incrByPipeline(recordList); recordList = new ArrayList<>(); } } catch (Exception e) { System.out.println(e); } } if (!CollectionUtils.isEmpty(recordList)) { incrByPipeline(recordList); recordList = new ArrayList<>(); } } stopWatch.stop(); System.out.println(stopWatch.prettyPrint()); } private void incrByPipeline(List recordList) { stringRedisTemplate.executePipelined(new RedisCallback
耗用时间: 11 位 ,单位 :ns,是单个命令耗时的 1/6。
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整