Redis 键的过期删除 & 内存淘汰策略

在这里插入图片描述

1、Redis 设置过期时间

EXPIRE key seconds       #1️⃣将key的生存时间设置为ttl秒
PEXPIRE key milliseconds #2️⃣将key的生成时间设置为ttl毫秒
EXPIREAT key timestamp   #3️⃣将key的过期时间设置为timestamp所代表的的秒数的时间戳
PEXPIREAT key milliseconds-timestamp#4️⃣将key的过期时间设置为timestamp所代表的的毫秒数的时间戳

1 和 2 两种方式是设置一个过期的时间段,比如处理验证码时,设置三分钟或五分钟后失效,把分钟数转换成秒或毫秒存储到Redis中。3 和 4 两种方式是设置一个过期的时间点,比如优惠卷的过期时间是某年某月某日,只是单位不一样。

2、键过期删除策略

  1. 惰性删除:只有访问这个键时才会去检查它是否已过期,如果过期了,则删除;如果没有过期,则返回该键。【这种方法对 CPU 友好,不会占用 CPU 资源,只是在获取键的时候检查是否过期,如果过期了,就顺手删除了。但是对内对很不友好,如果大量过期的键没有被访问,那就会占用大量的内存】
  2. 定时删除为每一个设置过期事时间的 key 都创建一个定时器,到期了就立即删除。【这种方法对内存非常友好,内存中存储的数据都是没过期的有用数据。但是对 CPU 不友好,会占用大量的 CPU 资源。假设现在内存充足,在并发访问量较大的情况下,CPU 还要腾出时间来处理过期键】
  3. 定期删除每隔一段时间就对一些键进行检查,删除其中过期的键。至于要删除多少过期键,检查多少个数据库,可以由算法决定。该策略是惰性删除和定时删除的一个折中方案,即避免占用大量 CPU 资源,也避免大量过期键占用内存空间。
    Redis 服务器实际使用的是惰性删除定期删除这两种策略,通过配合使用这两种删除策略,服务器可以很好地在合理使用 CPU 时间和避免浪费内存空间之间取得平衡。
    在这里插入图片描述

3、Redis 的内存淘汰策略

Redis 4.0 之前

  1. noeviction:不会淘汰任何数据,当使用的内存空间超过 maxmemory 值时,返回错误;【默认】
  2. volatile-ttl:从设置了过期时间的键中移除将要过期的键,键剩余生存时间越短越有可能被删除;
  3. volatile-random:从设置了过期时间的键中随机淘汰一些键;
  4. allkeys-random:在所有键值对中,随机选择并删除一些键;
  5. volatile-lru:从设置了过期时间的键中使用 LRU 算法移除那些最近最久未使用的键;
  6. allkeys-lru:使用 LRU 算法在所有键值中进行筛选,移除最近最久未使用的键;

Redis 4.0 之后新加了两条

  1. volatile-lfu:从设置了过期时间的键中使用 LFU 算法移除那些最近最少使用的键;
  2. allkeys-lfu:使用 LFU 算法在所有数据中进行筛选,移除那些最近最少使用的键;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值