ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis缓存淘汰策略

2020-01-20 20:52:05  阅读:263  来源: 互联网

标签:缓存 过期 redis maxmemory Redis volatile key 淘汰


缓存淘汰策略

介绍

  • 当 Redis 内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换 (swap)。交换会让 Redis 的性能急剧下降,对于访问量比较频繁的 Redis 来说,这样龟速的存取效率基本上等于不可用。
  • 在生产环境中我们是不允许 Redis 出现交换行为的,为了限制最大使用内存,Redis 提供了配置参数 maxmemory 来限制内存超出期望大小。
  • 当实际内存超出 maxmemory 时,Redis 提供了几种可选策略 (maxmemory-policy) 来让用户自己决定该如何腾出新的空间以继续提供读写服务。
noeviction # 不会继续服务写请求 (DEL 请求可以继续服务),读请求可以继续进行。这样可以保证不会丢失数据,但是会让线上的业务不能持续进行。这是默认的淘汰策略。
volatile-lru # 尝试淘汰设置了过期时间的 key,最少使用的 key 优先被淘汰。没有设置过期时间的 key 不会被淘汰,这样可以保证需要持久化的数据不会突然丢失。
volatile-ttl # 跟上面一样,除了淘汰的策略不是 LRU,而是 key 的剩余寿命 ttl 的值,ttl 越小越优先被淘汰。
volatile-random # 跟上面一样,不过淘汰的 key 是过期 key 集合中随机的 key。
# volatile策略只会针对带过期时间的 key 进行淘汰
allkeys-lru 区别于 volatile-lru,这个策略要淘汰的 key 对象是全体的 key 集合,而不只是过期的 key 集合。这意味着没有设置过期时间的 key 也会被淘汰。
allkeys-random 跟上面一样,不过淘汰的策略是随机的 key。
# allkeys策略会对所有的 key 进行淘汰

使用

  • 修改redis.conf的maxmemory,设置最大使用内存:

    maxmemory 1024000

  • 修改redis.conf的maxmemory-policy,设置redis缓存淘汰机制:

    maxmemory-policy noeviction

使用场景

  • 如果你只是拿 Redis 做缓存,那应该使用 allkeys下的淘汰策略,客户端写缓存时不必携带过期时间。
  • 如果你还想同时使用 Redis 的持久化功能,那就使用 volatile下的淘汰策略,这样可以保留没有设置过期时间的 key,它们是永久的 key 不会被 LRU 算法淘汰。

标签:缓存,过期,redis,maxmemory,Redis,volatile,key,淘汰
来源: https://www.cnblogs.com/RitualYang/p/12219360.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有