分布式缓存如何实现与数据库在强一致场景下的缓存方案?
- 内容介绍
- 相关推荐
本文共计5800个文字,预计阅读时间需要24分钟。
1. 概述:缓存与数据库的强一致性,强调线性一致性,核心目标是数据库中的值发生变更时,缓存需同步更新,确保一次性操作完成,后续任意客户端查询都返回最新值。
1. 概述缓存与数据库的强一致性,也称线性一致性,核心要求是:数据库中的值发生变更,缓存数据要实现同步复制,并且一旦操作完成,随后任意客户端的查询都必须返回这一新值。以下图为例,一旦写入b完成,必须保证读到;而写入过程中,认为值的跳变可能发生在某一瞬间,因此读到a或b都是可能的。数据库与缓存作为一个整体,在向外提供服务的过程中,无论数据是否变更过,都时刻保持数据一致,因为它内部的数据仿佛只有一份,即使并发访问不同节点。
秒杀是一个比较典型的强一致场景,一般秒杀系统的库存同时保持在数据库与缓存中,如果查询缓存有数据,直接可以走秒杀流程,将数据库中的库存数量进行扣减,同时将最新的数据更新到缓存,使缓存中数据与数据库中数据保持强一致,这里只是拿秒杀的场景来举例,类似秒杀的场景有很多,像抢门票系统、12306抢火车票等,资源比较少用户比较多,需要在特定时间内进行抢购的业务场景。真实秒杀场景的设计,是在缓存中扣库存,不会直接在数据库中进行扣库存,因为数据库的性能远远比缓存差,所以本篇也只是拿类似秒杀这样的场景,来阐述强一致下的设计思想与相关实现。
3. 方案分布式系统里面,有个众所周知的理论,就是CAP理论,CAP即:
Consistency(一致性)
Availability(可用性)
Partition tolerance(分区容忍性)
这三个性质对应了分布式系统的三个指标。
而CAP理论说的就是一个分布式系统,不可能同时做到这三点。
本文共计5800个文字,预计阅读时间需要24分钟。
1. 概述:缓存与数据库的强一致性,强调线性一致性,核心目标是数据库中的值发生变更时,缓存需同步更新,确保一次性操作完成,后续任意客户端查询都返回最新值。
1. 概述缓存与数据库的强一致性,也称线性一致性,核心要求是:数据库中的值发生变更,缓存数据要实现同步复制,并且一旦操作完成,随后任意客户端的查询都必须返回这一新值。以下图为例,一旦写入b完成,必须保证读到;而写入过程中,认为值的跳变可能发生在某一瞬间,因此读到a或b都是可能的。数据库与缓存作为一个整体,在向外提供服务的过程中,无论数据是否变更过,都时刻保持数据一致,因为它内部的数据仿佛只有一份,即使并发访问不同节点。
秒杀是一个比较典型的强一致场景,一般秒杀系统的库存同时保持在数据库与缓存中,如果查询缓存有数据,直接可以走秒杀流程,将数据库中的库存数量进行扣减,同时将最新的数据更新到缓存,使缓存中数据与数据库中数据保持强一致,这里只是拿秒杀的场景来举例,类似秒杀的场景有很多,像抢门票系统、12306抢火车票等,资源比较少用户比较多,需要在特定时间内进行抢购的业务场景。真实秒杀场景的设计,是在缓存中扣库存,不会直接在数据库中进行扣库存,因为数据库的性能远远比缓存差,所以本篇也只是拿类似秒杀这样的场景,来阐述强一致下的设计思想与相关实现。
3. 方案分布式系统里面,有个众所周知的理论,就是CAP理论,CAP即:
Consistency(一致性)
Availability(可用性)
Partition tolerance(分区容忍性)
这三个性质对应了分布式系统的三个指标。
而CAP理论说的就是一个分布式系统,不可能同时做到这三点。

