前言
我们工作中可能会遇到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参数值配置淘汰策略。