redis之pipeline批量存储

作者: 山东大葱哥 | 来源:发表于2019-05-17 11:30 被阅读9次

pipeline是redis批量提交的一种方式,也就是把多个命令操作建立一次连接发给redis去执行,在性能方面会比循环的单次提交会好很多。

性能对比

循环的单次提交

代码如下:

    public void testOne() {
        long begin = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            redisTemplate.boundValueOps(i + "a").set(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("每次都连接耗时:" + (end - begin) + "毫秒");
    }

耗时情况:

每次都连接耗时:2954毫秒

使用pipeline的一次提交

代码

public void testPipeline() {
        long begin = System.currentTimeMillis();
        redisTemplate.executePipelined(new RedisCallback<Long>() {
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                connection.openPipeline();
                for (int i = 0; i < 10000; i++) {
                    byte[] key = ("pipeline" + i ).getBytes();
                    byte[] value = ("pipeline" + i ).getBytes();
                    connection.set(key, value);
                }
                //connection.closePipeline();
                return null;
            }
        });
        long end = System.currentTimeMillis();
        System.out.println("一次连接耗时:" + (end - begin) + "毫秒");
    }

耗时情况:

一次连接耗时:87毫秒

结论

可见性能提升是很明显的。
另外直接使用jedis的pipeline,你会发现速度更快一些。

注意点

字节类型参数

注意在使用pipeline以后,在回调方法中我们需要使用原生的redis接口,而其中大部分都是字节型的参数,需要我们进行转换获取字节流,然后进行存储或读取。

存取的内容如何读取

通过pipeline方式存取的key,在使用redisTemplate读取时会遇到Null的问题,这是由于key值序列化的方法不一样造成的,为了避免这种情况,我们可以对redisTemplate进行设置,代码如下

        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());

以后就可以通过
redisTemplate.boundValueOps("pipeline0").get()
轻松读取pipeline存储的内容了。

相关文章

  • redis之pipeline批量存储

    pipeline是redis批量提交的一种方式,也就是把多个命令操作建立一次连接发给redis去执行,在性能方面会...

  • redis批量操作

    redis multi pipeline平时使用redis的时候,经常有批量操作的需求;比如批量读取一批数据,或者...

  • Spring的RedisTemplate Pipeline的正确

    redis-pipeline 我们都知道大批量有规律的redis写操作,用pipeline模式能够极大提高效率。在...

  • Redis 批量操作之pipeline

    业务场景 最近项目中场景需要get一批key的value,因为redis的get操作(不单单是get命令)是阻塞的...

  • redis调用lua说明文档

    redis调用lua脚本 在实际开发中,可以通过pipeline将多个命令批量传输给redis执行,减少网络开销;...

  • Redis pipeline以及批量优化

    Request/Response protocol Redis基于Request/Response 协议。通常情况...

  • redis pipeline简介

    java中redis的pipeline pipeline方式执行redis操作: doInRedis方法中实现需要...

  • RedisTemplate批量操作

    RedisTemplate批量添加操作教程,利用pipeline批量操作;multiSet()批量操作;for循环...

  • Redis之Pipeline

    Pipeline: 管道,流水线 一条命令的生命周期有4个阶段: 发送命令->命令排队->命令执行->返回结果,其...

  • springboot使用redis pipeline

    springboot redis之使用pipeline redis是基于客户端-服务器以及请求-响应协议的TCP服...

网友评论

    本文标题:redis之pipeline批量存储

    本文链接:https://www.haomeiwen.com/subject/ifynaqtx.html