尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

每日八股day16

每日八股day16 ### 本系列帖子为鼠鼠复习八股巩固记忆和个人理解所写如有错误纯属本人实力不佳欢迎各位大佬阅读指正 ###1.Redis 键过期删除三种策定时删除key设置过期时间时创建一个定时器时间一到立即删除。优点内存友好过期key马上被删不会浪费内存。缺点cpu不友好大量key同时过期会产生大量定时器事件阻塞主线程影响Redis性能。惰性删除不主动删等key被访问时先检查是否过期过期就删除并返回不存在。优点cpu友好只有在用到时才处理不占用额外cpu.缺点内存不友好大量长期不访问的过期key会一致占内存浪费内存。定期删除Redis每隔一段时间随机抽取一部分key检查删除其中过期的。优点平衡CPU和内存不会占用太多CPU也能及时清理过期key。缺点随机抽取有执行时间限制不能保证所有过期key都被及时删掉。2.Redis 内存满后八大淘汰策略分别是什么Redis内存使用达到上限之后一共有八种内存淘汰机制可分成三类不淘汰数据noeviction默认策略内存满了之后直接拒绝写入并返回错误保证数据不丢失。设置了过期时间的keyvolatile-lru淘汰最近最少使用的过期key。volatile-lfu淘汰使用频率最低的过期key。volatile-random随机淘汰过期key。volatile-ttl淘汰剩余存活时间最短、马上要过期的key。针对所有keyallkeys-lru在全部key里淘汰最近最少使用的。allkeys-lfu在全部key里淘汰使用频率最低。allkeys-random随机淘汰任意key。3.LRU 底层实现原理、Redis 近似 LRU 怎么做的传统LRU是最近最少使用淘汰算法核心是如果最近被访问过那么将来被访问的概率也更高主要实现是哈希表双向链表。为什么Redis不用标准LRU标准LRU需要额外链表结构占用内存大且高并发下频繁移动节点会有性能开销Redis用的是近似LRU。近似LRU原理每个key自带一个24bit的时间戳记录最后一次被访问的时间内存不足淘汰时随机采用5个key从中选出lru时间最早的key淘汰重复执行直到内存降到阈值一下。优点几乎不额外占用内存。效率极高避免链表维护开销。采样数足够时效果接近标准LRU。4.过期键会不会主动占用内存主从间过期怎么同步会并且在被真正删除前一直占用内存。redis只是给key打上过期标记并不会立即释放内存只有当key触发懒性删除、后台定时任务执行定期删除时才会真正把过期key从内存删除如果大量过期key长期不被访问就会持续占用内存。主从间过期如何同步主节点主导删除从节点不主动删。主库在自身触发惰性删除或定期删除后会将对应DEL命令同步到从库从库只负责执行这条命令从而实现过期键的同步删除。Redis 3.2之后从库读取时如果发现key已经过期会直接返回空假装key不存在但不会执行物理删除避免主从删除时序不一致保证最终数据一致。
返回列表