Redis | Redis内存淘汰策略、过期策略

目录

1. Redis内存淘汰策略

1.1 内存维护解决方案

1.2 主要策略:分为LRU淘汰、TTL淘汰、Random淘汰、LFU淘汰

LRU与LFU是不同的

1.3 内存操作命令

2. 过期策略

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

过期策略:用户处理过期的缓存数据;

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

1. Redis内存淘汰策略

在redis作为缓存使用过的程中,当内存不足时(内存使用已经超过mexmemory参数设定值时),需要处理新写入的且需要申请格外的空间的数据,Redis根据配置进行缓存淘汰大部分keys,保证后续写入能够成功。

1.1 内存维护解决方案

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

# 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

  • volatile-lru:从设置过期时间的数据集中(expries)中挑选出最近最少使用的数据淘汰
  • volatile-ttl:从设置过期时间的数据集中(expires)中挑选中将要过期的数据淘汰,ttl的值越大越优先被淘汰
  • volatile-random:从设置过期时间的数据集(expries)中随机的选取数据淘汰
  • allkeys-lru:从数据集(dict)中挑选最近最少使用的数据淘汰,该策略要淘汰的数据是全体key的集合,而非过期的key
  • allkeys-random:从数据集(dict)中选择任意数据淘汰
  • noeviction:禁止删除数据,当内存不足时,新写入操作就会报错,请求可以继续进行,保证已插入的数据不会丢失
  • volatile-lfu:只从redisDb.expires中,也就是设置了过期时间的key中随机选取对应的key按照lfu规则移除
  • allkeys-lfu:从redisDb.dict中,也就是全部key中随机选出对应的key按照lfu规则移除。

1.2 主要策略:分为LRU淘汰、TTL淘汰、Random淘汰、LFU淘汰

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

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

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

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

LRU与LFU是不同的

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

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

1.3 内存操作命令

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

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

config set maxmemory value :设置大小

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

2. 过期策略

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

  1. 定时过期:对每个设置过期时间的key都需要建一个定时器,到达过期时间会立即清除。该方法对内存友好,对CPU不友好,会占用大量的CPU资源去处理过期数据;
  2. 惰性过期:只有当访问一个key时,才会判断key是否过期,该方案最大化的节省CPU资源,但会占用内存资源(对CPU友好,对内存不友好);
  3. 定期过期:每隔一定的时间,会扫描一定数据的expires字典中的一些数据,并清除掉其中已过期的数据

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值