如何浅析数据库与缓存的双写一致性问题

技术如何浅析数据库与缓存的双写一致性问题今天就跟大家聊聊有关如何浅析数据库与缓存的双写一致性问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。缓存由于其高并发和高

今天,我将与您讨论如何分析数据库和缓存之间的双写一致性。很多人可能不太了解。为了让大家更好的了解,边肖为大家总结了以下内容。希望你能从这篇文章中有所收获。

缓存因其高并发性和高性能而被广泛应用于项目中。阅读过程如下:

如何浅析数据库与缓存的双写一致性问题

双写一致性有以下三个要求:

缓存无法读取脏数据。

缓存可能会读取过时的数据,但最终的一致性应该在可容忍的时间内实现。

这个可容忍的时间越短越好。

为了同时满足上述三个要求,读请求和写请求可以序列化并串入内存队列,以确保不会出现不一致。但是序列化后,系统的吞吐量会大大降低,支持在线请求的机器会比正常多几倍。

如何浅析数据库与缓存的双写一致性问题

因此,在这里,我们讨论三种常见的方法:

首先更新数据库,然后更新缓存

在更新数据库之前删除缓存。

首先更新数据库,然后删除缓存。

1. 先更新数据库,再更新缓存

这种方法普遍受到大家的反对,原因有以下两个:

原因一:线程安全角度。

如果同时请求A和请求B更新,将出现:

一个线程更新了数据库。

线程更新了数据库

线程更新了缓存

一个线程更新了缓存。

这说明请求A更新缓存应该早于请求B更新缓存,但是由于网络等原因,B比A更早更新缓存,这就导致数据脏了,所以不考虑。

同理,“先更新缓存,再更新数据库”的方案也会造成数据脏,所以不考虑。

2.原因:业务场景视角。

有以下两点:

如果您的业务需求中有更多的数据库写入场景和更少的数据读取场景,这种方案将导致在读取数据之前频繁更新缓存,从而浪费性能。

如果您写入数据库的值没有直接写入缓存,它们将在一系列复杂的计算后写入缓存。那么,每次写入数据库后,再次计算写缓存的值无疑是对性能的浪费。显然,删除缓存更合适。

如果必须更新缓存,请考虑将版本号添加到缓存的数据中。

如何浅析数据库与缓存的双写一致性问题

2. 先删除缓存,再更新数据库

这个方案也会导致不一致。如果同时请求A和请求B更新,将出现:

请求写入和删除缓存

查询发现缓存不存在。

请求查询数据库以获取旧值。

将旧值写入缓存的请求

向数据库写入新值的请求。以上情况会导致不一致。此外,如果不采用为缓存设置到期时间的策略,数据将总是脏的。

如何浅析数据库与缓存的双写一致性问题

解决方案:

请先删除缓存。

再次写入数据库(这两个步骤与之前相同)

休眠一定时间(如1秒或200毫秒),再次删除缓存。这样,可以再次删除缓存的脏数据。

然而,这种解决方案仍然会影响吞吐量,因为需要休眠线程。

3. 先更新数据库,再删除缓存

是很多项目采用的方案。让我们看看它是否安全。

假设有两个请求,一个用于查询操作,另一个用于b更新操作,将出现以下情况。

缓存刚刚失败。

查询数据库的请求,旧值

向数据库中写入新值的请求

删除缓存的请求

请求将找到的旧值写入缓存。

因此,产生了脏数据。然而,上述情况假设写请求比读数据库中的请求更快。事实上,在工程上,数据库的读操作比写操作快得多。

要么通过2PC或者Paxos协议保证一致性,要么想尽一切办法降低并发时脏数据的概率,可能是因为2PC太慢,Paxos太复杂。综合考虑,脸书选择了这第三种方案。

00-1010启动订阅程序,订阅数据库的binlog,获取需要操作的数据。在应用程序中,启动另一个程序从这个订阅程序获取信息并删除缓存。

看完以上内容,你对如何分析数据库和缓存的双写一致性有了更好的理解吗?如果您想了解更多知识或相关内容,请关注行业资讯频道,感谢您的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/129606.html

(0)

相关推荐

  • html和css基础知识有哪些

    技术html和css基础知识有哪些本篇内容主要讲解“html和css基础知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“html和css基础知识有哪些”吧!Html是

    攻略 2021年12月10日
  • 网站或者APP短信验证码是如何实现的

    技术网站或者APP短信验证码是如何实现的这篇文章主要介绍了网站或者APP短信验证码是如何实现的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。短信验证码下发

    攻略 2021年11月30日
  • 如何分析Python自动化运维开发中的变量

    技术如何分析Python自动化运维开发中的变量本篇文章给大家分享的是有关如何分析Python自动化运维开发中的变量,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看

    攻略 2021年12月4日
  • 对象Temessagejs脚本的简单编写方法是什么?

    技术TE对象message js脚本简单写法是什么这篇文章将为大家详细讲解有关TE对象message js脚本简单写法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

    攻略 2021年12月13日
  • 抖音刷赞软件网站,下单平台业务秒刷网?

    技术抖音刷赞软件网站,下单平台业务秒刷网?对抖音创始人来说,不断更新高质量的原创作品是非常必要的。早期的短视频作品通过短视频吸引了大量的粉丝关注,其最终目的是使粉丝量不断增长,再通过短视频的带货或直播的带货来获取一定的收

    测评 2021年10月20日
  • 诛心之论,“诛心之论”是什么意思

    技术诛心之论,“诛心之论”是什么意思所谓“诛心之论”,指在批评对方之时,不针对对方的行为、语言谈问题,而是绕过行为、语言去指责对方此行为、语言的目的、动机诛心之论。所以“诛心之论”又曰“动机说”。据说该成语出自于《后汉书

    生活 2021年10月31日