Redis内存达限时是否驱逐哈希子键?7.4前后行为及策略差异
Redis内存限制下的键驱逐行为(含7.4版本差异)
7.4版本之前的基础行为
在Redis 7.4之前,一旦触发内存限制的驱逐逻辑,只会删除整个顶级键(比如整个哈希键),绝对不会单独驱逐哈希里的子键。不管哈希子键有没有特殊属性,Redis都把整个哈希键当成一个不可拆分的单元来处理。
Redis 7.4的核心变化
7.4新增了HEXPIRE命令,支持给哈希子键单独设置TTL(过期时间),这直接改写了内存驱逐的规则:哈希子键不再是顶级键的附属,而是可以作为独立的驱逐候选对象。
volatile-lru策略下的表现
如果驱逐策略设为volatile-lru(只驱逐带TTL的对象):
- 内存不足时,Redis会优先删除用
HEXPIRE设置了TTL的哈希子键,不会直接动整个哈希键。 - 只有等所有带TTL的哈希子键都被清完,内存还是不够,才会考虑删除那些本身带TTL的顶级哈希键(如果有的话)。
allkeys-lru策略下的表现
如果用allkeys-lru(驱逐所有对象里最近最少使用的):
- Redis会把所有顶级键和带TTL的哈希子键都放进LRU统计池里,优先删除最近最少被使用的那个对象——可能是某个哈希子键,也可能是某个顶级键,全看LRU排序结果。
- 要是某个哈希键的所有子键都被清完了,空的哈希键会被自动清理。
内容的提问来源于stack exchange,提问作者tuk
相关产品推荐
相关产品推荐

