保持DB和缓存一致性


​ 对于维持DB和缓存的一致性,我们先假设更新数据库和更新缓存都可以成功的情况。

​ 主要有以下几种方法:

Cache Aside Pattern

​ 对于一致性更新,先把数据存到数据库中,成功后再让缓存失效

​ 这时,对于并发的更新和查询操作,并发查询操作拿到的是脏数据,而更新成功后的查询操作都是更新后的数据。

​ 不过理论上也有一直出现脏读的可能性:并发读和写,读操作缓存不命中,读操作从数据库取数据。此时写操作修改完数据库,让缓存失效。然后之前读的操作把脏数据存入缓存,造成缓存中脏数据存在。(可能性特别低,因为写操作比读操作慢很多,读操作在写操作前进入数据库操作并在写操作结束后就结束可能性特别低)

Read/Write Through Pattern

​ 应用认为后端就是一个单一的存储,后台数据库自己维护缓存。其中Read Through Pattern策略是在查询时更新缓存(当缓存失效的时候,后台服务器自动加载),而Write Through Pattern策略是在更新时更新缓存(当有数据更新时,如果没有命中缓存,则更新数据库并发返回。否则更新缓存再由缓存更新数据库)

Write Behind Caching Pattern

​ 在更新数据的时候,只更新缓存,不更新数据库,然后缓存会异步地批量更新数据库。这样效率非常快。缺点是数据库和缓存不能保持强一致性,还可能造成数据丢失

mysql更新缓存方式

​ 先更新缓存,然后异步把数据写到磁盘上。为了保证数据不丢失,采用WAL方法:数据进来后先把数据以log方式写到磁盘(由于是顺序写,所以很快)。写完后进行更新缓存操作,若出现死机等情况,重启后可以从log文件中重新把数据读出来然后再更新到缓存,最后异步更新到数据库。

转载请注明出处!!!

如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值