面试题答案
一键面试预防缓存雪崩的方法 - 设置不同过期时间
在Redis中,可以通过为每个缓存数据设置一个随机的过期时间,这个随机时间在一个合理的时间区间内波动。例如,原本所有数据设置的过期时间为60分钟,可以改为设置为55 - 65分钟之间的随机值。在代码实现上(以Python的redis - py库为例):
import redis
import random
r = redis.Redis(host='localhost', port=6379, db = 0)
key = 'example_key'
value = 'example_value'
# 设置55到65分钟之间的随机过期时间
expiry_time = random.randint(55 * 60, 65 * 60)
r.setex(key, expiry_time, value)
原理
- 分散失效时间:通过设置不同的过期时间,使得缓存数据的过期时间不再集中在同一时刻。这样,在某一时刻只有部分缓存会失效,而不是大量缓存同时失效,从而避免了对数据库瞬间产生巨大压力。
- 流量削峰:由于缓存失效的时间分散,数据库所承受的查询压力也会被分散到不同的时间段,就像把一座山峰的流量分散到多个小山坡,从而将流量高峰削平,保证系统在面对大量缓存失效时仍能稳定运行。