缓存是目前解决高并发场景下的主流解决方案必不可少的工具之一。
在高并发或者多线程的情况下,如何保证缓存和持久化存储的数据一致是业界面临的一个普遍问题。
本文针对几种常见的数据库、缓存更新方式,分析一下并发场景下存在的问题。
缓存数据库更新的几种常见方式
- 先更新缓存,后更新数据库
- 先更新数据库,后更新缓存
- 先删除缓存,后更新数据库
- 先更新数据库,后删除缓存
我们考虑一下这种场景。假设有并发请求A和B,按一下情况顺序执行。然后我们依次说明。
第一种情况
先更新缓存,后更新数据库
考虑A/B执行顺序如下:
- A更新缓存
- B更新缓存
- B更新数据库
- A更新数据库
最终导致的结果就是:缓存里是B的结果,但数据库里是A的结果,二者不一致。
第二种情况
先更新数据库,后更新缓存
考虑A/B执行顺序如下:
- A更新数据库
- B更新数据库
- B更新缓存
- A更新缓存
最终导致的结果就是:缓存里是A的结果,但数据库是B的结果,二者不一致。