download:云原生应用架构设计与开发实战
缓存与数据库双写分歧性几种战略剖析
一、背景
在高并发场景中,为避免大量恳求直接访问数据库,缓解数据库压力,常用的方式普通会增加缓存层起到缓冲作用,减少数据库压力。引入缓存,就会触及到缓存与数据库中数据如何坚持分歧性问题,本文将对几种缓存与数据库保证数据分歧性的运用方式停止剖析。为保证高并发性能,以下剖析场景不思索执行的原子性及加锁等强分歧性请求的场景,仅追求最终分歧性。
二、读取过程
• 读缓存
• 假如缓存里没有值,那就读取数据库的值
• 同时把这个值写进缓存中
三、更新过程
更新操作有多种战略,各有优劣,主要针对此场景停止剖析
战略1:先更新db,再删除缓存(常用的Cache-Aside Pattern旁路缓存)
问题:
1.假如更新db胜利,删缓存失败,将招致数据不分歧
2.极端场景,恳求A读,B写
1)此时缓存刚好失效 2)A查库得到旧值 3)B更新DB胜利
4)B删除缓存 5)A将查到的旧值更新到缓存中
此场景的发作需求步骤2)查db 一直慢于 3)的更新db,才干招致4)先于5)执行,通常db的查询是要快于写入的,所以此极端场