一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情
概述
redis是内存数据库,所以一般内存大小是有限的。特别是当我们应用系统对redis依赖非常高的情况下,选择合适的策略非常有必要。
8大策略
noeviction
redis在没有配置的情况下,这个是默认策略。指的是不淘汰任何key,当内存写满,直接抛出错误。这个策略明显不太友好,如果没有内存可写,那么会直接导致应用系统崩溃。
volatile-random
只对设置了过期时间的key进行淘汰,并且是随机的。这个策略可以保证系统的可用,但是随机删除还是不太好的,会把一些刚刚使用的key给删掉,容易给db造成一定压力。
volatile-ttl
只对设置了过期时间的key进行淘汰,先删除快要过期的。这个策略还是比较合理的。没有特别要求可用。但是如果我们设置了不太合理的过期时间,有些特别长,有些特别短,其实也不太好
volatile-lru
只对设置了过期时间的key进行淘汰,删除不太活跃的key。这个策略还是很合理的,不怎么活跃的key存在也是浪费内存空间,而且删掉不活跃的key,也不会对db产生压力,比较推荐。
volatile-lfu
只对设置了过期时间的key进行淘汰,对设置了过期时间的key进行访问次数排序,优先删除访问次数最小的key.这个策略主要问题是,当内存快不够时,一个热key进来了,访问次数还是1,会被删除,对db会存在持续压力。
allkeys-random
和volatile-random策略一样,但是针对的是全部数据
allkeys-lru
和volatile-lru策略一样,但是针对的是全部数据
allkeys-lfu
volatile-lru策略一样,但是针对的是全部数据
使用场景
1.针对上述,比较推荐的是volatile-lru和allkeys-lru
2.volatile-lru不会删除不设置过期的key,如果有不过期的热点数据推荐使用
3.allkeys-lru系统没什么要求,那么直接使用即可