springboot中使用pipeline提高redis性能

目录

前言

一、pipeline的作用、注意点

二、pipeline与M操作(mget/mset等)区别

三、测试pipeline性能


前言

pipeline是Redis的一个提高吞吐量的机制,适用于多key读写场景,比如同时读取多个key的value,或者更新多个key的value,本篇记录一下pipeline的相关知识,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

一、pipeline的作用、注意点

上面说了,pipeline就是为了提高吞吐量的,通常一次命令的消耗时间=一次网络时间 + 命令执行时间,我们都知道redis的性能是很高的,比起命令执行时间,网络时间很可能成为系统的瓶颈,使用pipelline可以将多条命令打包,一次性的发到redis服务,减少了网络请求次数,从而提升吞吐量。既然是通过网络传输命令,那pipeline每次携带的数据了不能过大,否则会占用网络影响网络性能。

二、pipeline与M操作(mget/mset等)区别

  1. M操作在Redis队列中是一个原子操作,pipeline不是原子操作。
  2. pipeline与M操作都会将数据顺序的传送顺序地返回(redis 单线程)。
  3. M 操作一个命令对应多个键值对,而Pipeline是多条命令。
  4. 原生批命令是服务端实现,而pipeline需要服务端与客户端共同完成。

三、测试pipeline性能

    @Test
    public void pipeline() {
        redisService.flushDB();
        long time1 = System.currentTimeMillis();
        for (int i = 1; i <= 100000; i++) {
            redisService.hset("key-" + i, "field-" + i, "value-" + i);
        }
        long time2 = System.currentTimeMillis();
        System.out.println(time2 - time1);
        redisService.flushDB();
        long time3 = System.currentTimeMillis();
        Pipeline pipeline = redisService.pipeline();
        for (int i = 1; i <= 100; i++) {
            for(int j = 0 ; j < 1000 ; j++ ) {
                pipeline.hset("key-" + i + j, "field-" + i + j, "value-" + i + j);
            }
            pipeline.sync();
        }
        long time4 = System.currentTimeMillis();
        System.out.println(time4 - time3);
    }

如上,使用pipeline将100000条命令分为100次每次发送1000条,运行结果如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值