一 redis的数据过期策略
-
定期删除策略
每100毫秒, 随机抽取设置了过期时间的key,如果发现过期了,就删除;
一是定期执行,每100毫秒来一次;
二是随机抽取一个key来检查并删除; 目的是为了避免依次轮询CPU高,如果千万个key都过期并轮询,整个redis就挂了。
所以,基于这个处理方式,并不是设置了过期时间的key一到过期时间就删除,它很有可能依然在内存中存在。有时候会发现明明设置了过期时间,但是内存依然没有减下去就是这个原因; -
惰性删除策略
在获取值的时候,先判断是否过期,如果过期就删除并不返回有效值。这相当于只有在请求出动触发时才会删除。
二 redis内存告急时的数据处理策略
当redis内存快慢了,redis会按照设置的淘汰策略进行数据删除,已释放内存空间:
- 策略1 插入新数据报错(很少用)
- 策略2 把最近最少使用的key删除
- 策略3 随机删除key
- 策略4 随机删除某个设置了过期时间的key
- 策略5 删除设置了过期时间且最少使用的的key
- 策略6 删除设置了过期时间且过期时间最早的key
三 redis的数据不能作为数据库适用
从上述第一条可知,redis很有可能会因为key的增加而内存告急;
从上述第二条可知,redis很有可能会以为内存告急而删除key;
由此,redis中的数据只能作为高速缓存来处理。
网友评论