📅【Redis学习笔记】缓存篇

type
status
date
slug
summary
tags
category
icon
password
Blocked by
Blocking
AI summary

三大缓存问题

缓存击穿、缓存雪崩、缓存穿透

问题
缓存击穿
缓存雪崩
缓存穿透
定义
热点key过期,大量请求直接访问数据库
大量key同时过期或Redis宕机
查询不存在的数据,每次都访问数据库
特点
单个热点key(缓存中不存在但db中存在)
大量key
不存在的key(缓存和db都不存在)
影响
数据库压力突增
数据库可能宕机
数据库压力大,CPU高

缓存雪崩解决方案

方案
实现方式
优点
缺点
过期时间打散
在基础时间上加随机值
简单易实现
可能不够精确
高可用集群
Redis集群 + 哨兵
可靠性高
成本较高
熔断降级
服务熔断或返回默认值
保护系统
数据不够实时

缓存穿透解决方案

方案
实现方式
优点
缺点
布隆过滤器
快速判断key是否存在
高效节省空间
有误判可能
缓存空值
对空结果也进行缓存
实现简单
占用缓存空间
参数校验
对参数进行合法性验证
避免无效查询
可能有遗漏

预防措施

场景
预防措施
实现方式
击穿
预热机制
提前将热点数据加载到缓存
雪崩
监控预警
监控Redis性能指标
穿透
数据同步
定期同步布隆过滤器
 
 
 

如何实现数据的一致性

一、问题分析

数据一致性问题主要出现在以下场景:
  1. 更新数据时的并发问题
  1. 缓存操作失败导致的不一致
  1. 读写并发导致的数据不一致

1. Cache Aside Pattern(推荐)

2. 消息队列重试机制

3. Canal + 消息队列方案

三、最佳实践建议

  1. 选择合适的策略
      • 一般场景:使用Cache Aside Pattern
      • 高可靠要求:使用消息队列重试机制
      • 完全解耦:使用Canal + 消息队列方案
  1. 防护措施
  1. 监控与告警
  1. 错误处理
通过以上方案的组合使用,可以最大程度保证数据的一致性。需要注意的是,在分布式系统中很难做到强一致性,通常我们追求的是最终一致性。选择哪种方案需要根据业务场景、性能要求和开发维护成本来综合考虑。
Prev
【Redis学习笔记】大key问题
Next
【Redis学习笔记】高可用篇
Loading...
Article List