MST
星途 面试题库

面试题:缓存设计之Redis高并发场景优化

在一个高并发的秒杀系统中,使用Redis作为缓存。当大量请求同时抢购一个商品时,如何利用Redis的特性避免超卖问题?请详细阐述你的设计思路,包括缓存数据结构、操作流程以及可能用到的Redis命令,并分析可能存在的风险及应对措施。
19.8万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 缓存数据结构:使用Redis的字符串(String)类型存储商品库存数量。例如,以商品ID为键,库存数量为值。
  2. 操作流程
    • 客户端发起抢购请求。
    • 应用程序先从Redis获取商品库存数量,判断库存是否大于0。
    • 若库存大于0,使用Redis的原子操作命令来减少库存数量。
    • 根据减少库存的操作结果判断是否抢购成功。
  3. Redis命令:使用GET命令获取商品库存数量,使用DECR(递减1)或DECRBY(递减指定数量)命令减少库存。

可能存在的风险及应对措施

  1. 缓存穿透:恶意请求查询不存在的商品,每次都穿透到数据库。
    • 应对措施:使用布隆过滤器(Bloom Filter),在请求到达时先判断商品是否存在,不存在则直接返回,避免查询数据库。
  2. 缓存雪崩:大量缓存同时过期,导致大量请求直接打到数据库。
    • 应对措施:设置缓存过期时间时添加随机值,使缓存过期时间分散;同时使用互斥锁,保证同一时间只有一个请求去查询数据库并更新缓存。
  3. 网络延迟:高并发场景下,网络延迟可能导致部分请求操作库存不及时。
    • 应对措施:在应用层增加重试机制,若因网络问题操作失败,可进行一定次数的重试。