Redis过期策略有几种?
Redis中提供八种过期策略,默认是noeviction
,即不删除任何数据,当内存不足时会直接报错。可以在Redis的配置文件中进行设置。
noeviction
:不淘汰任何key,但是内存满时不允许写入新数据,默认就是这种策略。volatile-ttl
: 对设置了TTL的key,比较key的剩余TTL值,TTL越小越先被淘汰。allkeys-random
:对全体key随机进行淘汰。volatile-random
:对设置了TTL的key,随机进行淘汰。allkeys-lru
:对全体key,基于LRU算法进行淘汰。volatile-lru
:对设置了TTL的key,基于LRU算法进行淘汰。allkeys-lfu
:对全体key,基于LFU算法进行淘汰。volatile-lfu
:对设置了TTL的key,基于LFU算法进行淘汰。
这里面有两个非常重要的概念,一个是LRU,另外一个是LFU。LRU的意思是最近最少使用,通过当前时间减去最后一次访问时间来计算一个值,该值越大,则淘汰优先级越高。LFU的意思是最少频率使用,它会统计每个key的访问频率,值越小,则淘汰优先级越高。
在项目中,我们可以设置为allkeys-lru
,即挑选最近最少使用的数据进行淘汰,这样可以保留一些经常访问的key在Redis中。
如果项目中涉及到置顶操作,可以设置为volatile-lru
,置顶的缓存数据不指定过期时间。
如果数据库有1000万条数据,而Redis只能缓存20万条数据,如何保证Redis中都是热点数据?
可以使用allkeys-lru
(挑选最近最少使用的数据淘汰)淘汰策略,这样留下来的都是经常访问的热点数据。
当Redis的内存用完了会发生什么?
主要取决于数据淘汰策略。如果是默认的配置(noeviction
),Redis会直接报错,因为无法删除任何数据以腾出内存空间。