MST

星途 面试题库

面试题:Redis缓存雪崩场景下,如何通过设置不同过期时间来预防雪崩?

在Redis缓存雪崩场景中,假设系统中有大量缓存数据且设置了相同的过期时间,这可能导致缓存同时失效,对数据库造成巨大压力。请阐述如何通过设置不同的过期时间来预防缓存雪崩,以及这样做的原理是什么。
12.0万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

预防缓存雪崩的方法 - 设置不同过期时间

在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)

原理

  1. 分散失效时间:通过设置不同的过期时间,使得缓存数据的过期时间不再集中在同一时刻。这样,在某一时刻只有部分缓存会失效,而不是大量缓存同时失效,从而避免了对数据库瞬间产生巨大压力。
  2. 流量削峰:由于缓存失效的时间分散,数据库所承受的查询压力也会被分散到不同的时间段,就像把一座山峰的流量分散到多个小山坡,从而将流量高峰削平,保证系统在面对大量缓存失效时仍能稳定运行。