缓存和数据库双写的策略
1、先更新数据库后更新缓存
先更新数据库,后更新缓存,存在的问题在于有些业务需求中缓存的值不是简单的从数据库读取后就能存放进去的,有时需要进行一些业务的计算后,才将最终的结果存放缓存。况且针对写多读少的场景,如果更新10次数据库,就要更新缓存10次,但是在一定的时间内就只读1次,这样就会产生大量的冷数据,影响性能。因此,不推荐使用这种。
2、先更新缓存后更新数据库
类似情况1,不推荐使用。
3、先删缓存后更新数据库
单线程下先删除缓存后更新数据库,是不会产生缓存与数据库双写不一致的现象。但是在高并发场景下,线程A在执行删除缓存、更新数据库的过程中,线程B执行读操作,发现缓存的值已经被删除,那么线程B会去读取数据库,如果此时线程A更新数据库的操作还没执行完,线程B读到了旧的值放入缓存,并返回,这样就产生了数据库与缓存数据不一致的现象。
解决思路1:串行化数据库与缓存的读写操作(强一致性)