发布网友 发布时间:2024-08-20 16:53
共1个回答
热心网友 时间:2024-08-24 06:06
Redis的Key过期与淘汰机制Redis作为内存数据库,虽然依赖内存存储,但通过AOF日志和RDB快照实现持久化,确保数据的持久性。对于key的管理,过期时间是关键,可通过设置TTL(Time To Live)来指定,过期后可通过`persist`命令取消。当key带有过期时间时,Redis会将其存入过期字典,定期检查并执行过期删除操作。
Redis采用“惰性删除+定期删除”策略,每秒检测10次(可调整),随机抽取20个key,如果过期key占比超过25%,则执行删除。内存达到上限时,Redis会使用内存淘汰策略,包括不淘汰(noeviction,Redis 3.0后默认)和淘汰策略调整(如设置范围或所有数据)。其中,LRU算法根据最近最少使用频率淘汰,而LFU算法则考虑数据访问次数。
LRU算法在Redis中实现是近似的,通过记录数据最后一次访问时间来优化内存。传统LRU基于链表,淘汰最久未使用的数据。LFU算法则记录访问频次,随着时间推移,访问次数较低的会被淘汰。