百木园-与人分享,
就是让自己快乐。

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 可以支持事务


来源:https://www.cnblogs.com/mpiter/p/16042587.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Redis Pipeline

相关推荐

  • 暂无文章