Redis使用pipeline批量查询所有键值对以及multiGet用法

本文探讨了如何通过将大键值对拆分为多个小键值对,并利用Redis的pipeline或多Get功能进行批量查询,以提高查询性能。实践结果显示,尽管采用了批量操作,但查询速度并未明显提升,可能是由于数据分布或Redis内部优化原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis使用pipeline批量查询所有键值对

本意是redis存储hashMap的时候单个key对应的value值存储的数据过大,有11m,读取该value值速度太慢,查询网上资料后都说把这个key-value拆分,再用pipeline或者multiGet查询,经过调研,如下:把这个key-value拆分成了46个key-value,然后再用pipeline或者multiGet查询,发现pipeline和multiGet确实可以批量查询多键值对,但是总速度跟之前单个键值对查询速度没有区别-.-
下面是redis表和pipeline以及multiGet的批量查询方法:

在这里插入图片描述对应的redis表

     @SuppressWarnings({ "rawtypes", "unchecked" })
    public List executePipelined(Collection<String> keySet) {
        return redisTemplate.executePipelined(new SessionCallback<Object>() {
            @Override
            public <K, V> Object execute(RedisOperations<K, V> operations) throws DataAccessException {
                HashOperations hashOperations = operations.opsForHash();
                for (String key : keySet) {
                    hashOperations.entries(key);
                }
                return null;
            }
        });
    }

    @Test
    public void testPp(){
        Collection<String> keySet = new ArrayList<>();
        keySet.add("info_platform_test:7");
        List list = executePipelined(keySet);
    }

multiGet用法

public List<String> multiGetCaches(List<String> key){
        try{
            if (null != key && key.size() > 0) {
                Collection<String> collection = key;
                List<String> list = redisTemplate.opsForHash().multiGet("info_platform_test:7",collection);
                if (null != list && list.size() > 0) {
                    return list;
                } else {
                    return null;
                }
            }else {
                return null;
            }
        }catch (RedisConnectionFailureException e){
            return null;
        } catch (Exception e){
            return null;
        }
    }

    @Test
    public void multTest(){
        List<String> stringList = new ArrayList<>();
        for (int j=0; j<47; j++){
            stringList.add(j+"");
        }
        List<String> list = multiGetCaches(stringList);
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值