redis中KEYS、SMEMBERS、SCAN 、SSCAN 的区别

        今天在看项目中大神写的框架中关于redis存储相关代码时,发现了再获取set数据类型的全部元素时,采用的是sscan函数,而不是采用的smembers函数,这两个到底有什么区别呢?

先看这两个命令:

keys:用于获取当前数据库的模式匹配的所有key

smembers:获取set集合中的所有元素

而scan又包含多个类似命令

SCAN 增量迭代当前数据库中的数据库键。
SSCAN 增量迭代集合键中的元素。
HSCAN 增量迭代哈希键中的键值对。
ZSCAN 增量迭代有序集合中的元素(包括元素成员和元素分值)。
也就是说,keys、smembers和scan家族命令的最大区别是:

          keys和smembers是获取全部,如果当redis中key的数量过去庞大(或者set的元素很多),则很耗费内存,会阻塞redis几秒钟

         scan家族是逐步增量获取。即遍历获取一定数量的key或者元素,在获取一定数量的key或元素,不会一次获取。

那么,scan命令就比keys、smembers命令好吗?不是这样的,scan命令家族也是有缺点的。由于scan采用的增量迭代,当redis中的key是随时变化的,比如key增加减少或者key的名字变更,这种情况,scan就暴露他的弊端了,可能无法获取所有的key了。

所以采用哪种方式获取key或者获取元素,得根据自己的业务,如果你key是随时变化,就采用keys或者smembers吧。因为我们业务中redis的初始化只是在项目启动时初始化一次,所以在获取set的全部元素时采用的sscan命令。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那些年的代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值