Redis内存管理
设置过期时间
expire key time
setex key time value
Redis如何判断数据是否过期
通过一个基于hash的过期字典(保存数据过期的时间)判断。如果在,看是否过期
在查询一个 key 的时候,Redis 首先检查该 key 是否存在于过期字典中(时间复杂度为 O(1)),如果不在就直接返回,在的话需要判断一下这个 key 是否过期,过期直接删除 key 然后返回 null。
数据过期策略
定时删除,设置键的过期时间,到达指定时间后自动删除该键,对cpu压力大
惰性刪除策略,在查和取的时候进行删除,对cpu友好
定期删除(Expired by Sampling):定期对Key检查,删除里面过期的Key(从一定量的数据库中取一部分随机数据进行检查,删除其中的过期键)。对内存友好。 删除根据执行时间及过期key比例进行调整
最常采用定期删除+惰性删除,通过执行时间和过期key比例进行定期删除的执行。
内存淘汰策略
- 设置过期时间的最近最少用
- 全键的最近最少用
- 设置过期时间的随机
- 全键的随机
- 新写入报错
- 挑选将要过期的