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

redis作为缓存,mysql的数据如何与redis同步

先介绍自己的业务背景,是一致性要求高的 还是 允许延迟一致,因为两者的回答不一样。

双写一致性

双写一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致。

读操作:缓存命中,直接返回;缓存未命中查询数据库,写入缓存,设定超时时间

写操作:延迟双删

 

1、此时,先删除缓存,还是先修改数据库?

          无论哪个先后,都会出现问题

2、为什么要删除两次缓存?

        先删除缓存,再操作数据库,有时候会有脏数据,所以在操作数据库之后再删除一次缓存,降低脏数据的出现。

3、为什么要延时双删?

        一般情况下数据库是主从模式,读写分离的,需要延时一会,让主结点把数据同步到从节点,所以需要延时,但延时还是会出现脏数据。

如何数据的保持强一致性呢?

        1)在写数据或读数据的时候添加分布式锁,但效率太低。

        

        2)一般存入缓存中的数据都是读多写少,可以用共享锁和排他锁,但效率还是低,但能保证数据的强一致性

允许延迟

第一种方式:适用MQ中间件,更新MySQL的数据后,发一条消息给MQ,同时缓存服务接收这条消息,将数据同步到缓存中

第二种方式: 不需要修改任何业务代码,利用canal伪装mysql的一个从节点,去读取binlog的日志,并更新缓存

结合自己的业务回答,参考:


http://www.mrgr.cn/news/12462.html

相关文章:

  • 编程学习之路上的挫折:如何在Bug迷宫中找到出口
  • Oracle发邮件时SMTP服务器配置方法与步骤?
  • Java 4.3 - Redis
  • 嵌入式学习——ARM学习(1)
  • Android点击和触摸音量小的问题(问题追踪)
  • 调试JS代码
  • 工厂模式和策略模式的区别
  • [Algorithm][综合训练][kotori和气球][体操队形][二叉树中的最大路径和]详细讲解
  • 本专业不好找工作,也许可以试试嵌入式 嵌入式学习路线 从C语言到MCU开发
  • 数据结构:顺序表
  • SpringCloud整合Nacos
  • [图论]游戏
  • 《陈天奇:机器学习科研的十年》阅读笔记
  • 金融基础知识-银行间债券市场交易规则+场外市场交易规则
  • 云计算day32
  • 力扣面试150 插入区间 模拟
  • 【Java项目开发】点菜系统(无前端)
  • 【扩散模型(八)】Stable Diffusion 3 diffusers 源码详解2 - DiT 与 MMDiT 相关代码(下)
  • 重卡智能充电机器人
  • while