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

目录

  • Redis 内存管理(淘汰策略/删除策略)
    • 一、淘汰算法
        • 1、LRU算法
        • 2、LFU算法
    • 二、Redis 8种淘汰策略
    • 三、删除策略

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来说是友好的
    • 缺点:内存来说是不友好的
  • 定期删除

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

你可能感兴趣的:(redis,java,数据库)