vlambda博客
学习文章列表

什么是Redis缓存淘汰策略?现在就带你研究

什么是Redis缓存淘汰策略?

六个问题带你了解什么是Redis缓存淘汰策略

一、如何查看redis最大占用内存?

redis.conf中

maxmemory

在64位操作系统下,redis默认不配置则为机器最大内存

二、一般生产上如何配置?

一般为机器内存的四分之三即可

三、如何修改redis的最大占用内存?

1、修改redis.conf 文件中的maxmemory值

maxmemory 1024


2、使用redis命令行设置

config set maxmemory 1024
四、什么命令查看redis内存使用情况?
redis-cli: info memory
五、Redis内存被打满了会出现什么情况?

1、设置Redis 最大内存为1字节

2、存入一个对象

3、redis 会报错 OOM memory> 'maxmemory'。占用内存大于最大内存

六、如何避免Redis OOM?什么是缓存淘汰策略?

键过期的时候是不是直接在内存中删除?如果不是,那么在内存中是如何操作的?

  • 三种不同的删除策略

    • 每隔一段时间执行一次删除过期键操作,通过随机抽样获取过期的key,然后进行删除

    • 这种方案相当于上述两种方案的折中,通过控制合理的删除时间间隔来删除key,减少对cpu资源的占用消耗以及对内存的占用

    • 但是这种方案还是会有缺陷,有可能随机抽样一直没有抽样到一些过期的key,仍然会有内存占用问题

    • 只有再访问key的时候,才会检查key的过期时间,若是已经过期就执行删除

    • 这种情况只有在访问的时候才会删除,所以可能有些过期了的key一直没有被访问,就会一直占用的redis内存

    • 对于设置有过期时间的key,时间到了,定时器任务立即执行删除

    • 因为要维护一个定时器,所以会占用cpu资源,尤其是有过期时间的key越来越多时,损耗的性能就会直线上升

    1. 定时删除:对cpu不友好

    2. 惰性删除:对内存不友好

    3. 定期删除:相当于上述两种方案的折中

    4. 总结:定期删除还是一些缺陷,需要有一个兜底的策略来控制当内存满了之后的操作

ps:当Redis占用内存达到 maxmemory的值时会触发缓存淘汰策略

  • maxmemory policy(内存策略)8种

    1. (默认)noeviction:不再删除淘汰

    2. allkeys-lru:对所有key使用lru算法进行淘汰策略

    3. volatile-lru:对有过期时间的key使用lru算法进行淘汰策略

    4. allkeys-random:对所有key使用随机算法进行淘汰策略

    5. volatile-random:对过期key使用随机算法进行淘汰策略

    6. volatile-ttl:删除快过期的redis键

    7. volatile-lfu:对过期key使用lfu算法进行淘汰策略

    8. allkeys-lfu:对所有key使用lfu算法进行淘汰策略

  • 算法


    1. lru(least recently used):最近最少使用

    2. lfu(least frequently used):最不经常使用


  • 如何手写lru算法

    • leetcode算法题 146题、LRU缓存机制