20年11月第4题
问题一
1 a
2 b
3 c d
4 f g
5 e
问题二
为什么选择 RDB 方式 #card
- 开发团队选择RDB方式可能是因为其在重启性能方面更优,能够在最短时间内重新建立服务,符合要求的7x24小时不间断服务需求。同时,RDB方式也相对简单,易于管理和维护
问题三
[[Redis]] “定期删除+惰性删除”策略 #card
Redis 的过期键(Expired Keys)是自动删除的,Redis 会在每个键的过期时间秒数到达时检查该键是否过期,如果是,它会自动从 Redis 中删除该键。
Redis 内部通过使用时间轮算法和惰性删除方法来实现过期键的删除。
具体来说,过期键的定期删除策略由redis.c/activeExpireCycle函数实现,每当Redis的服务器周期性操作redis.c/serverCron函数执行时,activeExpireCycle函数就会被调用,它在规定的时间内,分多次遍历服务器中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其中的过期键。然后,Redis 会启动一个后台线程,使用惰性删除方法来删除已过期的键。
惰性删除指的是,当需要访问一个键时,Redis 判断该键是否过期,如果过期就立即删除。
[[Redis]] “定期删除+惰性删除”策略失效场景 #card
是指”定期删除”没删除KEY,”惰性删除”也没生效。
因为大量过期的key在定期删除策略下没有及时删除 + 外部在这段时间内没有要查询这个key的动作,导致无法做惰性删除,所以还占用着内存。
[[Redis]] 内存淘汰机制 #card
(1)从已设置过期时间的数据集最近最少使用的数据淘汰。LRU
(2)从已设置过期时间的数据集将要过期的数据淘汰。
(3)从已设置过期时间的数据集任意选择数据淘汰。
(4)从数据集最近最少使用的数据淘汰。LFU
(5)从数据集任意选择数据淘汰。