推荐链接:
总结——》【Java】
总结——》【Mysql】
总结——》【Redis】
总结——》【Spring】
总结——》【SpringBoot】
总结——》【MyBatis、MyBatis-Plus】
Redis——》内存淘汰策略
- 一、内存淘汰策略
- 二、设置缓存大小
- 三、设置过期时间
- 四、选择具体淘汰策略
- 场景1:业务数据有明显的冷热数据区分
- 场景2:业务数据没有明显的冷热数据区分
- 场景3:业务需要置顶(置顶文章、置顶视频)
一、内存淘汰策略
淘汰策略 | 淘汰的数据范围 | 使用哪种算法进行淘汰 |
---|---|---|
volatile-lru | 有过期时间的key | lru算法 |
allkeys-lru | 所有key | lru算法 |
volatile-lfu | 有过期时间的key | lfu算法 |
allkeys-lfu | 所有key | lfu算法 |
volatile-random | 有过期时间的key | 随机 |
allkeys-random | 所有key | 随机 |
volatile-ttl | 有过期时间的key | 越早过期的越先被淘汰 |
noeviction | 无 | 不淘汰任何数据,直接返回错误 |
二、设置缓存大小
具体结合应用数据实际访问特点和成本开销来综合考虑。
一般建议把缓存容量设置为总数据量的 15% 到 30%,兼顾访问性能和内存空间开销。
CONFIG SET maxmemory 4gb
三、设置过期时间
# 60s后过期
expire key 60
四、选择具体淘汰策略
场景1:业务数据有明显的冷热数据区分
建议:使用 allkeys-lru 策略
优点:把最近最常访问的数据留在缓存中,提升应用的访问性能。
场景2:业务数据没有明显的冷热数据区分
建议:使用 allkeys-random 策略
场景3:业务需要置顶(置顶文章、置顶视频)
建议:使用 volatile-lru 策略,同时不给这些置顶数据设置过期时间
优点:置顶的数据一直不会被删除,而其他数据会在过期时根据 LRU 规则进行筛选