当前位置: 首页 > news >正文

Redis 缓存—处理高并发问题

Redis的布隆过滤器、单线程架构、双写一致性、比较穿透、击穿及雪崩、缓存更新方案及分布式锁。

1 布隆过滤器

是一种高效的概率型数据结构,用于判断元素是否存在。主要用于防止缓存穿透,通过拦截不存在的数据查询,避免击穿数据库。

原理:元素通过多个哈希函数映射到位数组的多个位置,添加元素时,将对应位设为1;查询时,若所有位均为1,则元素可能存在,否则必然不存在。

2 单线程架构

Redis 使用单线程来处理所有客户端的请求。实现原理:

  1. 事件监听与处理。客户端发起的请求会被加入到事件队列中。Redis根据事件顺序来解析及执行命令。
  2. 非阻塞I/O。通过多路复用技术,异步处理请求,避免阻塞。

优势:

  1. 天然避免并发问题。避免来线程开销。
  2. Redis基于内存处理,速度极快,单线程足以处理庞大请求量。

3 双写一致性

同时操作Redis缓存和后段数据库(如MySql)时,确保两者的数据一致。

并发场景下的一致性问题:

  1. 多个线程同时修改数据,可能会导致缓存与数据库不一致。
  2. 缓存过期后,重建缓存时可能因为并发请求导致脏数据。

1 旁路缓存模式

写入:1)先更新数据库;2)再删除缓存。

读取:1)先读缓存,命中则返回。2)为命中则读数据库,写入缓存后返回。

缺陷:1)删除缓存后到下次加载前存在短暂不一致窗口。2)高并发下可能触发缓存击穿。

2 延迟双删

写入:1)先删除缓存;2)更新数据库。3)延迟一定时间(如500ms)后再删除缓存。

第二次删除清除的是在“更新数据库”期间可能存在的旧缓存。

3 分布式锁强一致性

写入:1)获取分布式锁;2)更新数据库;3)更新/删除缓存;4)释放锁。

优点:强一致性,避免并发写入冲突。

缺陷:锁竞争可能降低性能。

4 缓存穿透、击穿及雪崩问题

穿透

大量请求查询缓存中不存在的数据,导致请求绕过缓存直接访问数据库。

解决方案:1)布隆过滤器。2)缓存空值,对查询结果为空的Key,缓存短时间(如5分钟)的空值。3)接口层校验,对请求参数合法性进行校验。

击穿

某个热点Key突然过期,大量并发请求同时涌入,Redis需要同时重建缓存。导致Redis瞬时压力过大,可能引发雪崩效应。

解决方案:1)使用分布锁,确保只有一个线程重建缓存,其他线程等待。2)热点Key永不过期,通过异步任务定期更新。

雪崩

大量Key同时过期或Redis集群宕机,导致所有请求直接访问数据库。

解决方案:1)随机过期时间,分散Key的过期时间。2)Redis集群高可用,避免单点故障。

表 缓存穿透、击穿及雪崩问题

相关文章:

  • 对于网络资源二级缓存的简单学习
  • 【嵌入式人工智能产品开发实战】(二十一)—— 政安晨:源码搭建小智AI嵌入式终端的后端服务(服务器)环境 - 助力嵌入式人工智能开发
  • 测试基础笔记第七天
  • [FPGA]设计一个DDS信号发生器
  • 每天学一个 Linux 命令(28):ln
  • CentOS stream 中部署Zabbix RPM软件包公钥验证错误
  • 20.3 使用技巧6
  • 自定义 strlen 函数:递归实现字符串长度计算
  • 如何使用人工智能大模型,免费快速写工作计划?
  • kotlin,编码、解码
  • 存储图表数据的模板类QCPDataContainer
  • TDengine 性能监控与调优实战指南(二)
  • 一文粗通 Celery 分布式任务队列
  • RV1126网络环境TFTPNFS搭建(四)
  • 产品经理学习过程
  • PG CTE 递归 SQL 翻译为 达梦版本
  • 指针(2)
  • gorm基础:自定义数据类型
  • 【Vulkan 入门系列】创建帧缓冲、命令池、命令缓存,和获取图片(六)
  • 【leetcode100】一和零
  • “女子被前男友泼汽油烧伤案”二审将于22日开庭,一审判12年
  • 澳门世界杯“中日对决”,蒯曼击败伊藤美诚晋级女单决赛
  • 不降息就走人?特朗普试图开先例罢免美联储主席,有无胜算
  • 中马签署互免签证协定,外交部:将进一步促进双边人员往来和交流合作
  • 图解|回应期盼、可感可及!26项措施打开上海民营经济发展新天地
  • 金科股份:控股股东被动减持收警告处罚与上市主体无关,对重整工作没有影响