跳到主要内容

认识

2025年01月05日
柏拉文
越努力,越幸运

一、认识


Redis 常被用作缓存层,存储热点数据,减少数据库压力,提升访问速度。在高并发系统中,Redis 常用于缓存以减轻数据库压力。然而,缓存系统会面临各种挑战,比如 缓存雪崩缓存穿透缓存击穿缓存失效缓存与数据库一致性 问题。具体工作流为: 在服务启动时,将定义的热点数据从数据库加载到 Redis 缓存中, 提前预加载热点数据到缓存。数据读取时,优先从缓存中读取,如果未命中则从数据库查询,并缓存到 Redis。设置 随机过期时间(TTL 避免缓存集中过期,造成缓存雪崩。查询无效数据时,将无效结果(如 null)缓存到 Redis,设置短 TTL 避免频繁查询数据库, 造成缓存穿透。在高并发场景下,当缓存未命中时使用分布式锁限制同一时间只有一个请求可以加载数据并更新缓存,防止高并发场景下多个请求同时访问数据库,导致缓存击穿。在更新数据时,优先更新数据库,再使缓存失效。使用延迟双删策略确保并发场景下数据一致性。

其中,分布式锁增加指数退避重试机制指数退避(Exponential Backoff)是指: 每次重试的间隔时间按照指数增长(如 2^n),逐步增加, 增加一个随机抖动(jitter),防止大量请求在相同时间再次争抢锁。计算公式为: Math.min(baseDelay * Math.pow(2, attempts), maxDelay) + Math.random() * jitterRangebaseDelay 为基础延迟时间, attempts 为当前重试的次数,使用 baseDelay * 2^attempts 动态调整重试间隔时间。maxDelay 为最大延迟时间,限制最大间隔时间为 maxDelay,防止过长的延迟。randomJitter 为随机抖动时间, 每次重试增加随机抖动 randomJitter,避免并发请求同时重试导致锁竞争。通过 引入指数退避策略,可以显著降低高并发场景下锁竞争的冲突概率,同时最大限度提高获取锁的成功率,增强系统的稳定性和可靠性。

二、工作


服务启动 - 用户 HTTP 请求  -  Redis Cache - MySQL Storage