共计 504 个字符,预计需要花费 2 分钟才能阅读完成。
内容目录
数据库与缓存的同步(双写一致性)
双写一致性是指当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致。
对于读操作:缓存命中,直接返回;缓存未命中,则查询数据库,写入缓存并设定过期时间
对于写操作:延迟双删
对缓存进行二次删除是为了确保缓存中没有脏数据。无论先删除缓存再修改数据库或者先修改数据库再删除缓存都会导致缓存中存在脏数据。
双写一致性的实现方案取决于不同的业务场景。若业务对数据的一致性要求高并且对实时要求也高,则可采用互斥锁方案;若业务对实时性要求不高,允许一定的延迟后再保持一致,则可采用异步的消息通知。
一、互斥锁方案
相关锁介绍
- 共享锁: 读锁,readLock。加锁之后,其它线程可以共享读操作。
- 排他锁: 独占锁,wirteLock。加锁之后,阻塞其他线程读写操作。
使用互斥锁实现双写一致
- 当读数据时,添加共享锁。读操作不互斥,写操作互斥。
- 当写数据时,添加排他锁。读写互斥。
这种方案具有强一致性、性能低的特点。适合强一致性要求比较高的业务。
二、异步的消息通知
当对数据进行修改时,我们可以向消息队列发送消息,由缓存服务更新缓存从而保证数据的一致性。这种方案依赖于消息队列的可靠性。
正文完