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

loveletters loveletters     2023-04-04     269

关键词:

什么是数据一致性

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

常见的本地缓存有 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返回数据

分布式问题

...:中华石杉公众号和B站视频;高并发、高可用设计 分布式ID:1)生成方式有几种,优缺点对比;UUID/snowFlake/   分布式缓存:1)缓存架构?2)Redis,AOP、cluster方案3)真正支撑高并发及高可用的复杂系统中缓存架... 查看详情

字节面试官:高并发场景下,如何保证缓存与数据库一致性?

...压力,缩短接口响应时间。这种方案在不需要考虑高并发得去写缓存,高并发得读写缓存时,是不会有问题,但是如果是在高并发场景下,要保证缓存和数据库的一致性,至少需要解决以下问题 查看详情

美团二面:redis与mysql双写一致性如何保证?

...捡田螺的小男孩谈谈一致性一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验 查看详情

分布式技术专题「分布式缓存专题」针对性分析缓存与数据库一致性如何解决

数据缓存由来在实际的业务场景中,一定有很多需要做数据缓存的场景,比如售卖商品页面,包括了许多并发访问量很大的数据,它们可以称作是是"热点”数据,这些数据有一个特点,就是更新频率低,读取频率高,这些数据... 查看详情

如何保证缓存与数据库的双写一致性?

...稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求 “缓存+数据库”必须保持一致性的话,最好不要做这个方案,即:读请求和写请求串行化,串到一个内存队列里去。串行化可以保证一定不会... 查看详情

分布式缓存的面试题9

 1、面试题 如何保证缓存与数据库的双写一致性? 2、面试官心里分析 你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 3... 查看详情

高并发场景下的缓存有哪些常见的问题?

...动更新缓存中的数据或者移除对应的缓存。 二、缓存并发问题缓存过期后将尝试从后端数据库获取数据,这是一个看似合理的流程。但是,在高并发场景下,有可能多个请求并发的去从数据库获取数据, 查看详情

高并发场景下缓存+数据库双写不一致问题分析与解决方案设计

Redis是企业级系统高并发、高可用架构中非常重要的一个环节。Redis主要解决了关系型数据库并发量低的问题,有助于缓解关系型数据库在高并发场景下的压力,提高系统的吞吐量(具体Redis是如何提高系统的性能、吞吐量,后面... 查看详情

高并发场景下缓存+数据库双写不一致问题分析与解决方案设计

Redis是企业级系统高并发、高可用架构中非常重要的一个环节。Redis主要解决了关系型数据库并发量低的问题,有助于缓解关系型数据库在高并发场景下的压力,提高系统的吞吐量(具体Redis是如何提高系统的性能、吞吐量,后面... 查看详情

缓存在高并发场景下的常见问题

...,主动更新缓存中的数据或者移除对应的缓存。 缓存并发问题缓存过期后将尝试从后端数据库获取数据,这是一个看似合理的流程。但是,在高并发场景下,有可能多个请求并发的去从数据库获取数据,对后端数 查看详情

缓存在高并发场景下的常见问题

...,主动更新缓存中的数据或者移除对应的缓存。 缓存并发问题缓存过期后将尝试从后端数据库获取数据,这是一个看似合理的流程。但是,在高并发场景下,有可能多个请求并发的去从数据库获取数据,对后端数 查看详情

巨人大哥谈缓存在高并发场景下使用法则

巨人大哥谈缓存在高并发场景下使用法则 缓存一致性问题当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。这就比较依赖缓存... 查看详情

保证缓存与数据库双写时的数据一致性

...么你如何解决一致性问题?  一般来说,就是如果你的系统不是严格要求缓存+数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案,读请求和写请求串行化,串到一个内存队列里去,... 查看详情

缓存在高并发场景下的常见问题

...的时,主动更新缓存中的数据或者移除对应的缓存。缓存并发问题缓存过期后将尝试从后端数据库获取数据,这是一个看似合理的流程。但是,在高并发场景下,有可能多个请求并发的去从数据库获取数据,对后端数据库造成极... 查看详情

如何保证数据库缓存的最终一致性?

...压力,从而提升业务的稳定性和访问体验。根据CAP原理,分布式系统在可用性、一致性和分区容错性上无法兼得,通常由于分区容错无法避免,所以一致性和可用性难以同时成立。对于缓存系统来说,如何保证其数据一致性是一... 查看详情

缓存在高并发场景下的常见问题

...,主动更新缓存中的数据或者移除对应的缓存。 缓存并发问题缓存过期后将尝试从后端数据库获 查看详情

1.并发概念学习与准备

...证线程安全,合理使用资源。  高并发:通过设计保证系统能同时处理很多请求。服务同时处理很多请求,提高程序性能。  二、缓存一致性  CPU的频率太快了,主存赶不上,这样在处理器时钟周期内,CPU常常等待主存,... 查看详情

高并发解决思路

...2、机器多了也扛不住了?服务拆分,把集中式部署改成分布式部署。(提升QPS)3、分布式了还是扛不住?先做降级,再做限流。(保证系统可用性)4、数据库扛不住了?上分布式缓存。(降低RT)5、缓存上了之后,数据还是扛... 查看详情