Redis内存淘汰策略

在Redis作为缓存使用过程中,当内存不足时,Redis根据配置进行缓存淘汰大部分keys,保证后续写入能够成功。

内存维护解决方案

在Redis的配置文件中redis.conf 中memeory managen

# maxmemory <bytes>

# MAXMEMORY POLICY:
# volatile-lru -> Evict using approximated LRU, only keys with an expire set.
# allkeys-lru -> Evict any key using approximated LRU.
# volatile-lfu -> Evict using approximated LFU, only keys with an expire set.
# allkeys-lfu -> Evict any key using approximated LFU.
# volatile-random -> Remove a random key having an expire set.
# allkeys-random -> Remove a random key, any key.
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# noeviction -> Don't evict anything, just return an error on write operations.
#

# The default is:
# maxmemory-policy noeviction

Redis的配置中没有设置最大的内存大小

如果Redis没有设置最大内存大小或者设置为0,在64操作系统下Redis不限制使用内存大小,在32位操作系统下最多使用3/4内存空间

内存操作命令:

config get maxmemory :查看最大内存情况

config set maxmemory value :设置大小

info memory :查看当前Redis内存使用命令

 

内存维护的方案主要是过期策略和内存淘汰策略

过期策略用于处理过期的缓存数据

内存淘汰策略用于在内存空间不足时需要额外申请空间的数据

过期策略:

Redis中对过期的数据的处理,通常有三种方式:

1、定时过期:对每个设置过期时间的key都需要建一个定时器,到达过期时间会立即清除。该方法对内存友好,对CPU不友好,会占用大量的CPU资源去处理过期数据

2、惰性过期:只有当访问一个key时,才会判断key是否过期,该方案最大化的节省CPU资源,但会占用内存资源(对CPU友好,对内存不友好)

3、定期过期:每隔一定的时间,会扫描一定数据的expires字典中的一些数据,并清除掉其中已过期的数据

expires字典会保存所有设置过期时间的数据。

内存淘汰策略

在内存不足时(内存使用已经超过mexmemory参数设定值是),需要处理新写入的且需要申请额外空间的数据

volatile-lru:从设置过期时间的数据集中(expries)中挑选出最近最少使用的数据淘汰

volatile-ttl:从设置过期时间的数据集中(expires)中挑选出将要过期的数据淘汰,ttl的值越大越优先被淘汰

volatile-random:从设置过期时间的数据集(expries)中随机的选取数据淘汰

allkeys-lru:从数据集(dict)中挑选最近最少使用的数据淘汰,该策略要淘汰的数据是全体key的集合,而非过期的key

allkeys-random:从数据集(dict)中选择任意数据淘汰

noeviction:禁止删除数据,当内存不足时,新写入操作就会报错,请求可以继续进行,保证已插入的数据不会丢失

主要策略:分为lru淘汰、ttl淘汰、Random淘汰

LRU策略(最近最少使用),核心思想,如果数据最近被访问过,那么将来被访问的几率也就会越高

TTL策略:在Redis中设置过期时间的数据集expries中挑选数据,根据ttl过期时间来进行淘汰,值越大越先淘汰

随机策略:在数据集中,随机数据的获取进行删除

LFU策略:Redis 4.0中新增策略,(最近最少使用)核心思想:如果数据在最近一段时间很少被访问到,那么认为数据在将来被访问的可能性也比较小,因此,当空间满时,最小访问频率的数据会被最先淘汰

volatile-lfu:

allkeys-lfu:

LRU与LFU是不同的:

LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!

LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值