首页 > 其他分享 >分布式系统——并发条件下如何保证缓存与DB数据一致性

分布式系统——并发条件下如何保证缓存与DB数据一致性

时间:2023-04-03 23:57:17浏览次数:41  
标签:缓存 版本号 DB redis 本地 分布式系统 数据

什么是数据一致性

我们常说的数据一致性指的是在程序运行过程中本地缓存、分布式缓存、数据库三者之间的数据一致性

常见的本地缓存有 hashmap、currenthashmap、guava cache、caffeine

分布式缓存常见的有 redis、memcache

常见数据不一致常见有:

  1. 本地缓存与mysql不一致

  2. redis缓存与mysql数据不一致

引入本地缓存的目的是增加服务的吞吐量、但是同时也会让架构变得复杂。

本地缓存与DB一致性解决方案

MQ方案

  1. 新增或更新了一条数据

  2. 通过gateway负载均衡策略转发到某一台应用A-1

  3. 应用A-1收到请求后,更新DB,同时更新了自己的本地缓存

  4. 应用A-1发送更新MQ的广播消息

  5. 应用A-2跟应用A-3收到消息,查询DB,更新本地缓存。

比较本地JVM变量的版本号与redis版本号

  1. 在应用本地定义一个成员变量LongAddr的版本号
  2. 比较redis中的版本号与本地变量中的是否相等
  3. 如果不相等则将DB中的数据读取到本地,同时将redis的版本号赋值到本地的版本号。

redis缓存与DB一致性解决方案

基于binlog方案

  1. 更新DB数据
  2. 通过CDC中间件监听mysql的binlog,同时同步数据到MQ
  3. 启动一个数据处理应用,消费MQ数据并进行数据加工
  4. 将加工后的数据写入redis
  5. 查询redis数据返回

延迟双删

先进行缓存清除,再执行更新操作,最后(延迟N秒)再执行缓存删除,上述中延迟的时间一定要大于一次读写操作的时间,原因是如果延迟时间小于写入redis的时间,会导致请求1删除了缓存,但是请求2缓存还未写入。

基于定时任务方案

  1. 更新DB数据,同时写入数据到redis
  2. 启动一个定时任务将DB数据同步到redis
  3. 前端发起接口查询请求,先从redis中查询数据
  4. reidis中如果没有数据,加一个分布式锁,再从DB中查询数据
  5. 查询redis返回数据

标签:缓存,版本号,DB,redis,本地,分布式系统,数据
From: https://www.cnblogs.com/loveletters/p/cache-consistency.html

相关文章

  • 分布式系统——分布式ID方案
    分布式ID介绍在分布式系统中,我们经常需要生成全局唯一的标识符,例如订单号,用户id,消息id等。这些标识符通常被称为分布式id。分布式id有以下几个常见的要求:全局唯一:不同的节点或服务不能生成重复的id。高性能:生成id的速度要快,不能成为系统的瓶颈。低延迟:生成id的过程要尽可能简......
  • RDB与AOF优缺点分析
       ......
  • MySQL(九)InnoDB行格式
    InnoDB行格式查看默认行格式:select@@innodb_default_row_format;查看数据库表使用的行格式mysql>useatguigudb;ReadingtableinformationforcompletionoftableandcolumnnamesYoucanturnoffthisfeaturetogetaquickerstartupwith-ADatabasechanged......
  • MySQL(九)InnoDB数据结构
    InnoDB数据结构1数据库的存储结构:页​ 索引信息和数据记录都是保存在文件上的,确切来说是保存在页结构中;另一方面,索引是在存储引擎上实现的,MySQL服务器上的存储引擎负责对表中数据的读取和写入工作。不同的存储引擎的存放格式是不同的,比如Memory甚至不使用磁盘进行存储数据。......
  • save配置完成RDB
      save:900秒有1个key发生变化就存300秒有10个key发生变化就存60秒有10000个key发生变化就存  ......
  • RDB优缺点
         ......
  • save指令完成RDB
          ......
  • 分布式系统——基于Redis的分布式锁的实现
    分布式锁的介绍分布式锁是分布式系统中用于协调多个进程或线程之间并发访问共享资源的一种机制。在分布式系统中,由于各个节点之间的通信存在延迟、故障等问题,可能会导致数据的不一致性。为了保证数据的一致性,需要使用分布式锁来协调各个节点的并发访问。在分布式系统中,多个节点......
  • CentOS 7.x 卸载删除MariaDB,重新安装
    卸载[root@node1~]#rpm-qa|grepmariadbmariadb-5.5.56-2.el7.x86_64mariadb-libs-5.5.56-2.el7.x86_64mariadb-server-5.5.56-2.el7.x86_64[root@node1~]#[root@node1~]#yumremovemariadb...Removed:mariadb.x86_641:5.5.56-2.el7DependencyRemoved:mariadb-server.x......
  • Redis 持久化之RDB 和 AOF
     Redis有两种持久化方案,RDB(RedisDataBase)和AOF(AppendOnlyFile)。如果你想快速了解和使用RDB和AOF,可以直接跳到文章底部看总结。本章节通过配置文件,触发快照的方式,恢复数据的操作,命令操作演示,优缺点来学习Redis的重点知识持久化。RDB详解RDB是Redis默认的持久化方......