Redis 中的过期数据回收是通过定期删除和惰性删除相结合的方式实现的。
- 定期删除:Redis 会在设定的时间间隔内,对过期的 key 进行一次扫描和删除操作。具体来说,每隔一段时间,Redis 就会遍历一定数量的数据库中的过期 key,并删除这些 key,以释放内存空间。可以通过设置
redis.conf配置文件中的hz参数来控制定期删除的频率。 - 惰性删除:当客户端访问某个过期的 key 时,Redis 会判断这个 key 是否过期,如果过期则直接删除,这就是惰性删除。需要注意的是,惰性删除只会对访问过期 key 的请求进行检测,因此如果某个 key 一直未被访问,则即使已经过期,也不会被删除。可以通过设置
redis.conf配置文件中的maxmemory-policy参数来控制惰性删除的策略。
在实际应用中,我们可以根据业务需求来设置 Redis 的过期时间和回收策略。一般来说,过期时间的设置应该考虑到数据的更新频率和读取频率,以及系统的内存资源情况。同时,回收策略的设置也应该根据具体的业务需求来调整,以达到最优的性能和资源利用率。常用的回收策略有 volatile-lru、volatile-ttl、allkeys-lru 等,可以根据具体情况选择适合自己业务场景的策略。