美文网首页
Redis的pipeline

Redis的pipeline

作者: 养一只tom猫 | 来源:发表于2021-03-26 10:11 被阅读0次
   redis的pipeline(管道)功能在命令行中没有,但redis是支持pipeline的,而且在各个语言版的client中都有相应的实现。 由于网络开销延迟,即算redis server端有很强的处理能力,也由于收到的client消息少,而造成吞吐量小。当client 使用pipelining 发送命令时,redis server必须部分请求放到队列中(使用内存)执行完毕后一次性发送结果;如果发送的命名很多的话,建议对返回的结果加标签,当然这也会增加使用的内存。

pipeline:可将命令合并为一次IO,可降低延迟。

本机测试redis-pipeline

@Autowired
    private StringRedisTemplate stringRedisTemplate;

@Test
    public void redisPipelineTest() {

        System.out.println("未使用管道管道执行前" + System.currentTimeMillis());
        for (int i = 0; i < 1000; i++) {
            stringRedisTemplate.opsForValue().set("not_pipeline" + i, String.valueOf(i));
        }
        System.out.println("未使用管道执行后" + System.currentTimeMillis());

        System.out.println("使用管道执行前" + System.currentTimeMillis());
        stringRedisTemplate.executePipelined(new RedisCallback<Object>() {
            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {
                for (int i = 0; i < 10; i++) {
                    connection.set(("pipeline" + i).getBytes(), String.valueOf(i).getBytes());
                }
                // 一定要返回null不然会抛出 InvalidDataAccessApiUsageException: Callback cannot return a non-null value as it gets overwritten by the pipeline
                return null;
            }
        });
        System.out.println("使用管道执行后" + System.currentTimeMillis());
    }

测试结果:


image.png

在本机测试中,pipeline性能比普通set高出很多

相关文章

网友评论

      本文标题:Redis的pipeline

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