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<Object>() {
@Override
public <K, V> Object execute(RedisOperations<K, V> 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...]
网友评论