什么是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越来越多时,损耗的性能就会直线上升
定时删除:对cpu不友好
惰性删除:对内存不友好
定期删除:相当于上述两种方案的折中
总结:定期删除还是一些缺陷,需要有一个兜底的策略来控制当内存满了之后的操作
ps:当Redis占用内存达到 maxmemory的值时会触发缓存淘汰策略
maxmemory policy(内存策略)8种
(默认)noeviction:不再删除淘汰
allkeys-lru:对所有key使用lru算法进行淘汰策略
volatile-lru:对有过期时间的key使用lru算法进行淘汰策略
allkeys-random:对所有key使用随机算法进行淘汰策略
volatile-random:对过期key使用随机算法进行淘汰策略
volatile-ttl:删除快过期的redis键
volatile-lfu:对过期key使用lfu算法进行淘汰策略
allkeys-lfu:对所有key使用lfu算法进行淘汰策略
算法
lru(least recently used):最近最少使用
lfu(least frequently used):最不经常使用
如何手写lru算法
leetcode算法题 146题、LRU缓存机制