浅谈Redis中key的删除时机

150 阅读2分钟

前言

我们工作中可能会遇到Redis中的数据的删除与我们的想法不一致的情况,因此,本篇会带大家了解一下Redis什么情况下会删除里面的数据,会删除什么样的数据,如何控制Redis去按照我们的想法去删除数据。

key到了设置的过期时间

key的过期时间到了,Redis会立即删除吗? 答案是并不会立即删除,Redis中数据的删除可以设置为定期删除或惰性删除

  • 定期删除:Redis每隔一段时间就去会去查看Redis设置了过期时间的key,会再100ms的间隔中默认查看3个key,一般是随机抽取key进行检查。
  • 惰性删除:如果当你去查询一个已经过了生存时间的key时,Redis会先查看当前key的生存时间,是否已经到了,直接删除当前key,并且给用户返回一个空值。

Redis的内存满了

当Redis的内存满了的时候,又添加了一个新的数据,就会执行Redis的淘汰策略。

  • noeviction:(默认)在内存不足时,直接报错。
  • volatile-lru:在内存不足时,Redis会再设置过了生存时间的key中干掉一个最近最少使用的key。
  • allkeys-lru:在内存不足时,Redis会再全部的key中干掉一个最近最少使用的key。
  • volatile-lfu:在内存不足时,Redis会再设置过了生存时间的key中干掉一个最近最少频次使用的key。
  • allkeys-lfu:在内存不足时,Redis会再全部的key中干掉一个最近最少频次使用的key。
  • volatile-random:在内存不足时,Redis会再设置过了生存时间的key中随机干掉一个。
  • allkeys-random:在内存不足时,Redis会再全部的key中随机干掉一个。
  • volatile-ttl:在内存不足时,Redis会再设置过了生存时间的key中干掉一个剩余生存时间最少的key。

我们可以通过配置redis.conf中的maxmemory参数值来开启淘汰功能。maxmemory参数用于设置最大内存,当数据达到该大小后,就会执行淘汰策略。此外,我们可以通过maxmemory-policy参数值配置淘汰策略。