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

DB_redis数据一致性(三)

前言
以mysql_redis 为例 介绍 数据一致性

1:数据一致行(单进程/单线程)
这个没什么说的,都是串行
在这里插入图片描述

2:数据一致行(多进程/多线程)
读的逻辑,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。

参考 https://cloud.tencent.com/developer/article/2245213
1> 先写mysql,再写redis
2>先写redis,在写mysql
3>先删redis,再写mysql
4> 先删redis,再写mysql,延迟N时间,再删redis
5> 先写mysql,再删redis (可以借助消息队列的重试机制)
6> 先写mysql,通过binlog,异步更新redis
7> 单数据库 + redis, 某索引的数据查询与修改在同一线程里,可以忍受脏数据的可以在其他线程里查询,适合逻辑简单的
1,2,3是铁定有问题的
4 双删的方案,也有点问题,延时再删除, N不好确定啊,N小了,第二次删空了,老数据又重新存储到缓存了,N大了,不就是卡了么
5 先写mysql,再删redis 中间这段时间读取的是脏数据,自行评估能不能接受
借助消息队列的重试机制,也是异步操作,一样存储脏数据时间,自行评估能不能接受
6 会保证 MySQL 和 Redis 的最终一致性,相当于异步更新,中间过程,缓存里还是脏数据,自行评估能不能接受
7 单数据库 + redis时,只需要保证查询与修改 在同一线程里操作,无需管是不是多线程模式,适合逻辑交互简单的(玩家间没什么交互),相当于处理个人数据时为 串行处理
eg:游戏中玩家数据, 玩家ID为主索引,玩家A,玩家B,工会, 线程A,线程B,线程C
只需要玩家A 的操作全在线程A 里操作,玩家B 的在线程B 操作,工会 在线程C 操作(工会里涉及玩家的数据由玩家线程发送过去,要更新时,如玩家在线由玩家线程更新,不在线统一到固定某线程更新),排行榜,拉数据打竞技等 可以忍受脏数据的可以在别的线程查询(查db或缓存都可以)

图画工具推荐下 :draw.io 线上线下都可以用,还时开源的 download:https://app.diagrams.net/

3:如果觉得有用,麻烦点个赞,加个收藏


http://www.kler.cn/a/399519.html

相关文章:

  • 【分布式技术】分布式缓存技术-旁路缓存模式(Cache Aside Pattern)
  • Spring Boot 接口防重复提交解决方案
  • 基于Java和Vue实现的上门做饭系统上门做饭软件厨师上门app
  • 计算机编程中的设计模式及其在简化复杂系统设计中的应用
  • linux笔记(防火墙)
  • 【模板】字典树luoguP8306
  • web3+web2安全/前端/钱包/合约测试思路——尝试前端绕过直接上链寻找漏洞
  • @bytemd/vue-next Markdown编辑器的使用
  • Linux下MySQL的简单使用
  • 定时器(QTimer)与随机数生成器(QRandomGenerator)的应用实践——Qt(C++)
  • Linux中的挂载
  • vue 自定义指令( 全局自定义指令 | 局部自定义指令 )
  • 深度学习之GAN的生成能力评价
  • Windows C++ TCP/IP 两台电脑上互相传输字符串数据
  • 【Linux学习】【Ubuntu入门】1-4 ubuntu终端操作与shell命令1
  • 数据驱动的期货市场决策:民锋科技的量化分析创新
  • Python 小高考篇(4)循环语句
  • web——upload-labs——第三关——后缀黑名单绕过
  • main中的int argc, char* argv[],命令行调用函数时输入参数用的
  • Ubuntu24.04LTS在线安装Docker引擎
  • Qt---双缓冲绘图
  • Golang | Leetcode Golang题解之第565题数组嵌套
  • 读写锁分离设计模式详解
  • 文件 fd
  • Python 在人工智能与大数据中的应用
  • 【ubuntu】Geogebra