数据库与缓存⼀致性⽅案
-
- 1、背景
- 2、数据⼀致性⽅案设计
- 3、数据⼀致性⽅案流程图
- 4、关键代码
-
- 4.1、 处理数据⼀致性的消息队列⼊⼝
- 4.2、数据⼀致性配置的常量信息
1、背景
现有的业务场景下,都会涉及到数据库以及缓存双写的问题,⽆论是先删除缓存,再更新数据,或者先更新数据,再删除缓存,都⽆法保证数据的⼀致性。本身他们就不是⼀个数据源,⽆法通过代码上的谁先谁后去保证顺序
2、数据⼀致性⽅案设计
⾸先我们对于所有的DB操作都不去添加具体的删除缓存的操作,⽽是通过canal监听binlog的⽅式,待数据确认已提交到数据库后,通过监听的变化,解析出对应的数据后,过滤掉⾮增删改的binlog,然后通过常量类配置的需要处理数据⼀致性的相关表以及关键字段和缓存前缀key,进⾏组装出需要进⾏删除的缓存key。并且通过mq的ack机制来保证 缓存⼀定会被删除掉。
3、数据⼀致性⽅案流程图
4、关键代码
4.1、 处理数据⼀致性的消息队列⼊⼝
@Slf4j
@Component
public class CookbookConsistencyListener