面试题答案
一键面试1. 缓存穿透策略
- 布隆过滤器策略:
- 适用场景:当有大量不存在的 key 被高频访问,查询数据库压力大时适用。例如在电商商品查询场景,黑客恶意使用不存在的商品 ID 进行查询。
- 策略说明:在 Redis 中使用布隆过滤器,将所有可能存在的 key 提前添加到布隆过滤器中。当查询时,先经过布隆过滤器判断,若不存在则直接返回,避免查询数据库。
- 空值缓存策略:
- 适用场景:针对偶尔出现查询不存在数据的场景。比如在用户信息查询中,偶尔有用户输入错误的 ID 进行查询。
- 策略说明:当查询数据库发现数据不存在时,在 Redis 中缓存一个空值,并设置较短的过期时间。下次相同查询时,直接从 Redis 返回空值,避免重复查询数据库。
2. 缓存雪崩策略
- 过期时间打散策略:
- 适用场景:大量缓存数据设置了相近的过期时间,可能导致同一时间过期引发雪崩的场景。如电商大促活动,大量商品缓存设置了活动结束时间过期。
- 策略说明:为缓存数据设置过期时间时,在原计划过期时间基础上,增加一个随机的时间偏移量,让缓存过期时间分散开,避免集中过期。
- 互斥锁策略:
- 适用场景:适用于对数据一致性要求较高,且缓存重建成本较高的场景。例如核心业务数据的查询,如订单金额等。
- 策略说明:当缓存失效时,先获取互斥锁,只有获取到锁的请求才去查询数据库并更新缓存,其他请求等待。锁释放后,其他请求直接从缓存获取数据。
3. 缓存击穿策略
- 热点数据永不过期策略:
- 适用场景:对于热点数据,如热门新闻、热门商品信息等持续被高频访问的场景。
- 策略说明:将热点数据在 Redis 中设置为永不过期,同时使用后台线程定时更新数据,保证数据的准确性。
- 加互斥锁策略:
- 适用场景:针对单个热点 key 过期瞬间大量请求涌入的场景,且对数据一致性有一定要求。例如明星微博等热点信息查询。
- 策略说明:在热点 key 过期时,使用互斥锁,只有一个请求能查询数据库并更新缓存,其他请求等待,防止大量请求同时查询数据库。