Redis Pipeline

前言

今天在优化Feed流时发现服务重启后,初始化数据保存数据到Redis时异常慢,原来之前用的是单个set命令去做的,早就听闻Pipeline是redis批量操作的利器,正好这次用Pipeline进行优化;

整合Redis实战

一、原理分析

1、单个命令操作

2、Pipeline批量操作

二、测试代码

    @Overrider
    private RedisTemplate strRedisTemplate;

 
    //单个新增操作
    @RequestMapping(value = "/set/single", method = RequestMethod.GET)
    public void setSingle() {
        for (int i = 0; i < 100; i++) {
            strRedisTemplate.opsForValue().set("single:" + i, "123");
        }
    }

    //批量新增操作
    @RequestMapping(value = "/set/pipeline", method = RequestMethod.GET)
    public void setPipeline() {
        strRedisTemplate.executePipelined(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                for (int i = 0; i < 100; i++) {
                    connection.set(("pipel:" + i).getBytes(), "123".getBytes());
                }
                return null;
            }
        });
    }

    //单个读取操作
    @RequestMapping(value = "/get/single", method = RequestMethod.GET)
    public void addSingle() {
        for (int i = 0; i < 100; i++) {
            strRedisTemplate.opsForValue().get("single:" + i);
        }
    }


    //批量读取操作
    @RequestMapping(value = "/get/pipeline", method = RequestMethod.GET)
    public void getPipeline() {
        List<String> list = strRedisTemplate.executePipelined(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                for (int i = 0; i < 100; i++) {
                    connection.get(("pipel:" + i).getBytes());
                }
                return null;
            }
        });
    }

以上代码不管set还是get 都需要return null。 另外批量读取时,返回的List,如果 connection.get 在Redis不存在,则List中会有null值存在。 需要自己去过滤null值。

RedisCallback 和SessionCallback区别

SessionCallback & RedisCallback 的作用都是:让RedisTemplate进行回调,通过它们可以在同一条连接下执行多个Redis命令。SessionCalback提供了良好的封装,优先使用它,RedisCallback稍微复杂一些。

区别:
SessionCallback 可以支持事务

posted @ 2022-03-23 08:45  技术那点事儿  阅读(1009)  评论(0编辑  收藏  举报