redis是基于内存的,内存都是有限的,如果我们往redis中添加的数据超出了redis的内存范围会怎么样呢?
答案:某些数据将会被删除
那么如何删除呢?
- 手动设置过期时间:比如使用set key (expire time)设置为1个小时过期,那么1个小时之后get key还能不能得到数据呢? 答案肯定是得不到的了,那就证明数据被删除了吗?显然不是,设置过期时间,redis也只是 ---- 定期删除+惰性删除
- 简单说:设置了过期的key,redis会定期去检查当前过期的,然后删除,但是不是遍历所有key找出过期的,而是随机抽取,那么这样定期删除肯定就不能保证所有过期的key被删除掉,那内存中就会堆积大量过期的key,当然当我们手动 get key时如果过期了,则redis会删除,那么如果没有被随机抽取我们也没有手动去操作的过期key,redis如何处理呢—— “淘汰”策略
Redis 有哪几种数据“淘汰”策略?
- 内存淘汰策略(LRU算法)
- noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。一般不使用
- allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
- allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key
- volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key
- volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
- volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除
来源:oschina
链接:https://my.oschina.net/u/4111233/blog/3044814