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

Redis的使用问题

1:穿透,访问缓存中没有,数据库中也没有的数据,直接忽略缓存层,直达数据库
解决方案:方案一,查一个不存在的数据时,给一个设置一定过期间的key的数据,存入缓存,方案二:布隆过滤器,在将数据存入Redis时,会同时存储一个Redis的键到布隆过滤器中,通过布隆过滤器提供的多个Hash函数对Key进行Hash运算,再对位数组长度进行取余,得到一个下标,将该下标值设置为1,访问同样的数据时如果通过布隆过滤器计算后的值相等,则认为缓存中可能存在这个数据(hash运算后得到的结果可能相同,哈希冲突)在缓存中查找数据,如果出现一个0,则认为这个数据不在缓存中,就去数据库中查找数据。
2:缓存一致性问题:缓存一致性是指缓存和数据库两者的数据保持一致(造成缓存不一致的原因可能是在写数据库和写缓存两步存在异常,也可能是并发所导致。写数据库和写缓存导致不一致称为双写不一致,比如:先更新数据库成功了,更新缓存时失败了,最终导致不一致)
解决方案:分布式锁,延迟双删(当一个线程删除缓存中的数据,并修改数据库中的主数据时从数据库会同步主数据库中的数据,当同步完成后再次删除缓存中的数据,这个时候即使在数据库是数据同步过程中有新的线程会去访问缓存由于缓存的数据被删除了,新的线程会访问数据库中的数据,再将数据保存到缓存,但是我们最后都会将缓存中的数据删除,等待新的线程访问数据据,将新数据写入缓存,保证最终数据的一致性),方案三:MQ异步同步,写数据库时canal读取binlog日志,将数据变化日志写入mq同步程序监听mq接收到数据变化的消息,同步程序解析消息内容写入redis,写入redis成功正常消费完成,消息从mq删除完成数据的同步。方案四:采用定时任务方式,根据程序业务,合理设置定时任务。更新数据库以及缓存数据。
3:缓存雪崩,请求大量访问相同的数据,数据没有保存在缓存中,而直接访问数据库时,数据库由于负载过大直接宕机
解决方案:分布式锁,访问的数据在缓存中设置一个拥有有效过期时间的空数据(让请求通过缓存获取数据,减少数据库压力防止数据库宕机),热点数据用不过期。

http://www.zskr.cn/news/8314.html

相关文章:

  • 设计模式(C++)详解—单例模式(2) - 指南
  • lc1032-字符流
  • C++小白修仙记_LeetCode刷题_哈希表
  • 【F#学习】字符串String
  • 实用指南:多技术融合提升环境生态水文、土地土壤、农业大气等领域的数据分析与项目科研水平
  • CF2143F Increasing Xor
  • 提到链接,你能想到什么
  • 提到链接,你能想到什么
  • 解题记录说是 | P3695 CYaRon!语
  • [GDKOI2023 提高组] 游戏 题解
  • 实用指南:AI推理范式:从CoT到ReAct再到ToT的进化之路
  • ctfshow web入门 信息搜集
  • CTFWEB姿势总结
  • 详细介绍:架构思维:分布式缓存实战
  • 规模化加速AI:从用户、开发者到企业的深度策略解析
  • 最新IDEA 2025 专业版破解永久破解教程(附资源)intellij IDEA
  • AtCoder ABC423F - Loud Cicada 题解 容斥原理
  • 1756:八皇后
  • 矩阵置零-leetcode
  • 重新开始配置hadoop等
  • 实用指南:kafka 原理详解
  • 网络编程-HTTP - 详解
  • 网络流初步浅谈:EK与Dinic
  • Spring框架事件驱动架构核心注解之@EventListener - 指南
  • FreeRTOS SMP 资料收集
  • 2025.9.19——卷9-10选择
  • ctfshow web 入门 php特性
  • 详细介绍:Git如何无痕上传当前项目最新状态从当前远程到另一个远程
  • 【qt】全局事件总线
  • 深入解析:React Device Detect 完全指南:构建响应式跨设备应用的最佳实践