Redis dbsize命令的准确性
dbsize
Redis中命令的准确性如何?
我注意到,返回的键dbsize
数与keys
命令返回的实际键数不匹配。
这是一个例子:
redis-cli dbsize(integer) 3057
redis-cli keys "*" | wc -l
2072
为什么dbsize
键数比实际数字高得多?
回答:
我想说这与密钥到期有关。
键/值存储(例如Redis或memcached)无法为每个要过期的对象定义物理计时器。他们太多了。取而代之的是,他们定义一个数据结构以轻松跟踪要过期的项目,并将所有过期事件多路复用到单个物理计时器。他们还倾向于实施惰性策略来处理这些事件。
使用Redis,当某项过期时,什么也不会发生。但是,在访问每个项目之前,系统地进行检查以避免返回过期的项目,并有可能删除该项目。在此惰性策略的基础上,每100毫秒触发一次清除算法,以使许多项目实际失效(即从主词典中删除它们)。每次迭代中考虑的键的数量取决于到期工作量(算法是自适应的)。
结果是,当您有稳定的到期事件流时,Redis可能会积压要在给定时间点到期的项目。
现在回到问题所在,DBSIZE命令仅返回主字典的大小,因此它包括尚未删除的过期项目。KEYS命令遍历整个词典,访问各个键,因此它排除了所有过期的项目。因此,项目数可能不匹配。
以上是 Redis dbsize命令的准确性 的全部内容, 来源链接: utcz.com/qa/417745.html