spring data redis使用pipline

6 篇文章 0 订阅
4 篇文章 0 订阅

使用stringRedisTemplate.executePipelined可以向redis批量提交一批命令,进行命令批处理。效率比遍历的方式执行单条语句要高。‘

spring data redis使用pipline的两种方式。

redisTemplate.executePipelined(new RedisCallback<Long>() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                StringRedisConnection conn = (StringRedisConnection) connection;
                for (String key : keys) {
                    conn.hDel(key, mapKeys);
                }
                return null;
            }
        });
redisTemplate.execute(new RedisCallback() {
            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {
                keyValueList.forEach(e->{
                    connection.stringCommands().set(e.getKey().getBytes(),e.getValue().getBytes());
                });
                return null;
            }
        },false,true);

基于lettuce客户端的pipline每次执行上述两个代码段仅使用连接池中的一个连接。因为lettuce客户端是基于Tcp长连接的,在一个连接中传输所有的命令。而基于Jedis的客户端上述两个代码段会使用连接池中的多个连接进行命令提交,所以一定要注意连接池中预留足够连接数。
一般redis支持的连接数很多(详见redis server maxclients参数),且每次连接中命令执行较快。所以在硬件资源充足的情况下可适当调大客户的redis连接池最大活跃连接数。
设置spring.redis.pool.max-active属性.
对于批量更新无需返回值的操作不推荐如下方式执行pipline,速度较慢。同时在Jedis客户端仍然会使用连接池中的多个连接。

stringRedisTemplate.execute(new SessionCallback(){
            @Override
            public Object execute(RedisOperations redisOperations) throws DataAccessException {
                for (String key : keys) {
                    redisOperations.opsForHash().delete(key, mapKeys);
                }
                return null;
            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值