Redis数据过期策略

1. 数据类型

五种数据类型

2. Redis为什么这么快

  • Redis是基于内存的操作,CPU不是Redis的瓶颈,内存大小和网络带宽最有可能是Redis的瓶颈;
  • 单线程的效率已经非常高,没有必要使用多线程;单进程避免了线程或线程上下文切换的消耗,以及锁相关问题的消耗
  • Redis只是处理客户端请求是单线程的,其他事情是在其他进程或线程中进行的,比如RDB文件生成是在子进程中进行
  • 数据结构设计简单,操作方便

3. Redis数据过期策略

3.1 定期删除策略

Redis启用一个定时器监视所有的key,判断key是否过期,过期则删除,这种策略可以保证过期的key最终都被删除,但是每次遍历内存中所有key非常消耗CPU资源。

3.2 惰性删除策略

在获取key时先判断key是否已过期,如果过期则删除,这种策略有个缺点时如果一个key一直未被使用,就一直在内存中,其实它已经过期了,会浪费大量内存空间

两种策略互补,结合起来,定时删除策略每次随机取一部分key进行检查,降低CPU的消耗;惰性删除策略删除访问到的key,基本满足所有的场景;剩余的没被抽到也没有被访问的key,则由内存淘汰策略删除

3.3 内存淘汰策略

1. 当内存不足时,新写入数据报错(Redis默认策略)
2. 当内存不足以容纳新数据时,移除最近最少使用的key(LRU推荐使用)
3. 在键空间中,随机移除某个key
4. 在设置了过期时间的键中,移除最近最少使用的key(Redis既当缓存,又当持久化存储时使用此策略)
5. 在设置了过期时间的key中,随机移除某个key
6. 在设置了过期时间的key中,先过期的key先移除