Redis的缓存过期策略通常有三种:
一、定时过期
每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。
优点:该策略可以立即清除过期的数据,对内存很友好;
缺点:若过期key很多,删除这些key会会占用大量的CPU资源去处理过期的数据,从而影响性能。
二、 惰性过期
只有当访问一个key时,才会判断该key是否已过期,过期则清除。
优点:该策略可以最大化地节省CPU资源:删除操作只发生在取出key的时候发生,而且只删除当前key,所以对CPU时间的占用是比较少的,而且此时的删除是已经到了非做不可的地步(如果此时还不删除的话,我们就会获取到了已经过期的key了)
缺点:对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存,甚至导致内存泄漏。
三、定期过期
每隔一定的时间,会扫描一定数量的的key,并清除其中已过期的key。
该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。