Redis是如何管理内存中过期数据的

一 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中的数据只能作为高速缓存来处理。

你可能感兴趣的:(Redis是如何管理内存中过期数据的)