Redis的过期策略

Redis中所有数据结构都可以设置过期时间,在一个key设置了过期时间后,Redis会将该key放入一个独立的字典中,并定时遍历这个字典来删除到期的key(定时删除)。也可以在客户端访问这个key的时候,对key 的过期时间进行判断,过期了再删除(惰性删除)。

定时扫描策略

1、先从过期字典随机选出20个key(扫描耗时上限25ms);
2、判断并删除已经过期的key;
3、如果过期key的比例超过25%,回到步骤1;

redis如何设置过期 redis设置过期策略_redis如何设置过期

需要注意的是,从节点不会进行过期扫描,而是主节点key到期时删除key 的del指令更新到AOF文件中,再主从同步AOF根据AOF文件的del指令来删除key

Key同一时间过期导致的问题:

Redis持续扫描过期字典,不断执行扫描—>删除—>扫描这一过程直到被删除key的比例不超过25%。这种情况就可能会导致Redis的其他读写请求出现卡顿,因为删除key需要频繁回收内存页,而回收内存页会有CPU消耗。

缓存雪崩

缓存雪崩:在某一个时间段,所有key在同一时间过期,导致查询压力瞬间打到关系型数据库,或导致数据库不可用

解决方法

很简单,key的过期时间设置一个随机范围