网站建设制作人员招聘要求,属于网页制作工具,营销活动策划网站,网站收录不好排名高文章目录 1. 引入2. 讲解2.1 Redis 中的 8 种数据淘汰策略2.2 LRU 和 LFU 算法2.3 建议 3. 总结 1. 引入
在 Redis——数据过期策略 的“引入”部分讲解过#xff0c;Redis 的数据存在内存中#xff0c;而内存容量相对较小#xff0c;不能将大量数据 无限期 地缓存。然而Redis 的数据存在内存中而内存容量相对较小不能将大量数据 无限期 地缓存。然而对于有些场景例如 缓存击穿 的解决方案二——逻辑过期需要将一部分数据 “无限期” 地缓存到 Redis 中或者在某一时间段内海量查询请求使得大量数据缓存到 Redis 中。
那么当缓存的数据越来越多直至 Redis 的最大内存限制时Redis 会如何应对呢这就涉及到本文要讲的 数据淘汰策略 (缓存淘汰策略)即 Redis 在内存达到最大限制时为了释放空间选择键删除的方式。
2. 讲解
2.1 Redis 中的 8 种数据淘汰策略
Redis 的数据淘汰策略共有 8 种
noeviction不淘汰任何键内存达到最大限制后不允许写入新数据是 默认策略。volatile-ttl对设置了 TTL (Time-to-Live过期时间) 的键比较键的剩余 TTL 值TTL 越小的值越先淘汰。allkeys-random对于所有键随机选择并淘汰。volatile-random对于设置了 TTL 的键随机选择并淘汰。allkeys-lru对于所有键基于 LRU 算法进行淘汰。volatile-lru对于设置了 TTL 的键基于 LRU 算法进行淘汰。allkeys-lfu对于所有键基于 LFU 算法进行淘汰。volatile-lfu对于设置了 TTL 的键基于 LFU 算法进行淘汰。
在 Redis 的 redis.conf 配置文件中配置方式如下
maxmemory-policy allkeys-lru # 使用 对所有键按 LRU 淘汰 的策略2.2 LRU 和 LFU 算法
LRU (Least Recently Used最近最少使用)重点关注数据的 使用时间淘汰 最久未使用 的数据。假如三个键 name, age, weight 从前到后依次缓存到 Redis 中并且使用的顺序为 age - name - weight - name如果需要基于 LRU 淘汰则淘汰的优先级是 age weight name。LFU (Least Frequently Used最少频率使用)重点关注数据的 使用频率淘汰 使用频率最低 的数据。
2.3 建议
一般情况下使用 allkeys-lru 策略把 最近最常用 的数据留在缓存中。因为大部分情况下数据都是有 冷热 之分的也就说有些数据 访问频率 高有些低然而 很久之前的 访问频率高的 数据再被访问的可能性不大所以不需要缓存很久之前的数据。综上所述一般情况适合使用 allkeys-lru 策略。
3. 总结
当 Redis 的内存达到最大限制时Redis 会根据指定数据淘汰策略选择一些数据进行淘汰。其中需要重点理解 LRU (淘汰最久未使用的数据) 和 LFU (淘汰使用频率最低的数据) 这两种算法。在生产中建议使用 allkeys-lru 这种数据淘汰策略保存 最近最常用 的数据。