redis的hscan替换hgetall的疑问,redis返回列表获取数据示例

本文探讨了在C++中使用Redis的hscan命令来分页获取hash表中的大量数据时遇到的问题及解决办法。当hash表大小不超过特定阈值(约1023条记录)时,hscan会一次性返回所有数据而非分批返回。文章提供了检查返回游标、类型和数量的方法,并给出了C++示例代码。

redis的库简单安装使用参考:

C++操作Redis的简单例子_imxiangzi的博客-CSDN博客_c++ redis

以上为使用前了解信息,下面为正题内容;

在hash表中通过hgetall方法获取全部的key和value害怕之后影响效率!

想要通过hscan来通过游标分页获取,恭喜你,想的是对的,但是通过实测每次hscan给的数量和游标都没有效果,返回全部的数据!

这里通过查询得知,当hash表的数据小于一定量的时候(1023条,不一定正确),hscan模式返回的是全部数据的,返回的游标也是0;

想要预留的的话,可通过判断返回值的游标、返回type、返回数量来做自己的定制处理;

当返回游标为0时候,表示已经返回完数据了,type表REDIS_REPLY_ARRAY,表示返回的可以通过list获取数据,然后通过返回数据来控制下标获取数据即可!

c++示例:代码仅为参考,可能有误

if(REDIS_REPLY_ARRAY !=  this->_reply->type &&
       2 == this->_reply->elements &&
       this->_reply->element[1]->elements > 1) {
        str_rt = this->_reply->element[1]->element[1]->str;
}

返回游标位置:this->_reply->element[0-->str

返回数据长度:this->_reply->element[1]->elements

获取key的字符串:this->_reply->element[1]-->str
获取value的字符串:this->_reply->element[1]->element[1]->str

如果对你有用,点赞 收藏 再走呗!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值