Redis的缓存淘汰策略

在Redis中,允许用户设置最大使用内存的大小server.maxmemory,在内存限定的情况下是很有用的。

当Redis内存数据集大小上升到一定大小的时候,就会试行数据淘汰策略,redis提供了6种数据淘汰策略。

redis的内存淘汰策略.png

redis.conf配置文件中说明了,redis在到达最大内存容量时便会移除元素。

  • volatile-lru:从设置过期时间的数据集中,移除最近最久未使用的元素。
  • allkeys-lru:从redis所有数据中,移除最近最久未使用的元素。
  • volatile-random:从设置过期时间的数据集中,随机选择一个数据进行释放。
  • allkeys-random:从redis所有数据中,随机选择一个数据进行释放。
  • volatile-ttl:从设置过期时间的数据集中,选择一个将要过期的数据释放。
  • noeviction:[ɪˈvɪkʃn] 以为可神、驱逐 ,不删除任何数据,直接返回异常。
noenvi.png

默认的淘汰策略为noenviction,类似于lru算法。默认情况下,Redis会随机挑选5个键,并且从中选取一个最近最久未使用的key进行淘汰,在配置文件中,可以配置maxmemory-samples的值来设置redis需要检查key的个数,但是检查的越多,耗时越久。

一般推荐的淘汰策略是volatile-lru。我们再应用程序中识别Redis中保存数据的重要性。

  1. 针对于不变的,重要的数据(例如配置数据),不应该设置有效期,这样Redis永远不会淘汰这些数据;
  2. 针对于哪些不是很重要,并且可能会发送改变的数据,我们应当设置有效期,这样在内存不足的情况下,可以淘汰这部分数据。

历史文章

mybatis&&数据库优化&&缓存目录
JAVA && Spring && SpringBoot2.x 目录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容