使用Redis pipelining提高执行速度

Redis 如果有大量命令一个一个执行需要依次提交到redis --> 等待返回 -->提交下一个命令 -->等待返回
这样会浪费大量的通信时间
所以在需要一次大量命令的时候可以使用redis的pipelining一次提交所有命令给redis,然后redis会将命令依次执行并使用一个list返回所有命令的执行结果

@RestController
public class RedisController {

    @Autowired
    RedisTemplate redisTemplate;

 @GetMapping("/test")
    public void test() {
        ValueOperations ops = redisTemplate.opsForValue();
        long start = System.currentTimeMillis();
        for (int i = 0; i <1000; i++) {
            ops.increment("num", 1);
        }
        System.out.println("普通方式执行时长"+(System.currentTimeMillis()-start));
        long start2 = System.currentTimeMillis();
        List list = redisTemplate.executePipelined(new SessionCallback() {
            @Override
            public  Object execute(RedisOperations redisOperations) throws DataAccessException {
                ValueOperations ops = redisTemplate.opsForValue();
                for (int i = 0; i <1000; i++) {
                    ops.increment("num", 1);
                }
                return null;
            }
        });
        System.out.println("pipeline方式执行时长"+(System.currentTimeMillis()-start2));

        System.out.println("======== "+list);
    }
}
 
 

执行结果:
可以看到速度大概提高了五倍左右

普通方式执行时长 257
pipeline方式执行时长 43
======== [1001, 1002, 1003, 1004, 1005...]

你可能感兴趣的:(使用Redis pipelining提高执行速度)