springboot使用redis pipeline

2020-03-10  本文已影响0人  陆阳226

springboot redis之使用pipeline

redis是基于客户端-服务器以及请求-响应协议的TCP服务,客户端向服务器发送请求是阻塞模式的,必须在等到服务器响应返回结果之后才能发送下一个请求,使用pipeline可以在服务端未响应时,继续向服务端发送请求,并最终一次性读取所有的服务端响应

springboot中使用

springboot中redisTemplate有对应的api使用pipeline方式连接:
List<Object> executePipelined(RedisCallback<?> action)
List<Object> executePipelined(SessionCallback<?> session)
在使用时只需重写RedisCallback的inRedis方法或者SessionCallback的execute方法,两者的区别是使用SessionCallback时支持开启事务(需要方法上加上@Transactional注解)

简单的使用管道测试:

public void usePipeline() {
    long start = System.currentTimeMillis();
    List<Object> list = redisTemplate.executePipelined(new SessionCallback<Object>() {

        @Override
        public Object execute(RedisOperations operations) throws DataAccessException {
            for (int i = 0; i < 50000; i++) {
                operations.opsForValue().get("city");
            }
            return null;
        }
    });
    long end = System.currentTimeMillis();
    log.info("开启管道用时: {}ms", (end - start));
}

public void noPipeline() {
    long start = System.currentTimeMillis();
    ArrayList<City> cities = new ArrayList<>();
    for (int i = 0; i < 50000; i++) {
        cities.add((City) redisTemplate.opsForValue().get("city"));
    }
    long end = System.currentTimeMillis();
    log.info("没有管道用时: {}ms", (end - start));
}

测试结果:

com.example.demo01.service.RedisService  : 开启管道用时: 3644ms
com.example.demo01.service.RedisService  : 没有管道用时: 10451ms
上一篇 下一篇

猜你喜欢

热点阅读