项目中,使用redis来做缓存,可以有效提高系统性能,但关于缓存一致性你有了解多少?项目中缓存的操作主要是读缓存和写缓存。
1、读缓存
首先读缓存,缓存存在直接返回,缓存不存在,读数据库,保存到缓存,返回
2、写缓存
何时写缓存,新增和更新的时候的写缓存?这样做是有问题的,1、每次更新都更新缓存,浪费资源2、缓存计算复杂,比如联合表查询的结果。
所以我们采用更新的时候,删除缓存,让读取的时候来保存缓存。
但是,先更新后删除,还是先删除缓存后更新呢?
先更新后删除缓存,更新成功,删除缓存失败,那么之后每次的获取的数据都是未删除的缓存,数据不一致
先删除缓存后更新呢?在并发的时候会有问题,A线程删除缓存,然后更新中,此时B来读取数据,此时从数据库中获取到的数据是未更新的,然后保存到缓存中,然后A更新成功,结果数据不一致
最终的做法是,先删缓存,更新数据,然后异步再删除缓存。延时双删。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。