Redis 内存管理(淘汰策略/删除策略)

Redis 内存管理(淘汰策略/删除策略)

一、淘汰算法

1、LRU算法

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。
时间T:数据自上一次到现在的时间.


2、LFU算法

说明:LFU算法是redis5以后才提出的.
LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。
使用次数越少越先被删除.


二、Redis 8种淘汰策略

  1. volatile-lru: 将设定了超时时间的数据,采用LRU算法将数据提前删除.
  2. allkeys-lru -> 对所有的数据采用LRU算法进行删除
  3. volatile-lfu -> 设定超时时间的数据采用LFU算法删除
  4. allkeys-lfu -> 对所有数据采用LFU算法删除
  5. volatile-random 设定了超时时间的数据随机删除
  6. allkeys-random 所有数据随机删除
  7. volatile-ttl 设定了超时时间的数据根据剩余时间少的删除数据
  8. noeviction 不删除内存数据,如果内存溢出报错返回.

修改redis配置文件600行.

# The default is:
# 
  maxmemory-policy volatile-lru

三、删除策略

  • 定时删除

    • 创建一个定时器,定时的执行对key的删除操作
    • 优点:CPU来说并不是友好的
    • 缺点:程序需要维护一个定时器,这就会占用 CPU的资源
  • 惰性删除

    • 每次只有再次访问 key 的时候,才会检查 key 的过期时间,若是已经过期了就执行删除
    • 优点:CPU来说是友好的
    • 缺点:内存来说是不友好的
  • 定期删除

    • 每隔一段时间(100ms),就会随机抽取检查删除掉过期的 key
    • 定期删除是上述两种方案的折中方案,每隔一段时间删除过期的 key,也就是根据具体的业务,合理的取一个时间定期的删除 key

四、相关面试题

问题一:如何保证 Redis 中的数据都是热点数据?

在实际的应用场景中,一般是面临了大量的结构化的数据,但是redis的容量比较小,不可能说把所有的数据全部刷到内存里面,所以我们要优先保证所有的热点数据也就是用户访问比较多的数据放在缓存里面,这样的话才能体现 redis 被合理的利用;

那具体应该怎么做呢?
我们在设置一个 key 的时候,都会给这个 key 设置一个过期时间,比如说这个 key 的过期时间为一个小时,那么一个小时到了,这个 key 就过期访问不了了,但是如果在到期之前被访问到了,那么我们可以增加一定的过期时间,比如说访问了一次增加30s或者一分钟,按照实际的业务场景来定,这样的话 访问的越多,过期时间就越长,留在redis中的自然就是热点数据了,当然这些过期的 key 不是立即被删除的,redis 也是有一个删除策略的——定期删除,默认是每隔 100ms随机抽取一些设置了过期时间的这个 key 来检查是否过期,如果过期就直接删除,注意一点:不是每隔100ms就遍历所有的设置过期时间的key,那样的话就是一场性能灾难,它是每隔100ms随机抽取过期 key 来检查并且删除的,那么定期删除就可能出现很多过期时间的key 到了时间并没有从redis中清除掉,这个时候就需要做惰性删除——就是在获取某个key的时候,redis会检查一下,这个key如果过期了直接从redis中删除掉,两者结合使用,一般能保证过期key从redis中删除,留下来的就是我们需要的热点数据。
如果定期删除漏掉了很多key 也没有及时去做查询,也没有走惰性删除,这个时候可能有大量的过期 key 堆积在内存里面,导致内存的耗尽。这个时候可以走内存淘汰机制——LRU算法最近最少使用的key直接删除掉,保证了充足的空间留给热点数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值