1 个回答
常见的方案有以下几个:
1、先更新数据库,再更新缓存。
由于是两个操作,如果多线程并发情况下,很难保证线程之间的顺序,可能导致缓存的是旧数据。一般不推荐这种方案
2、先删除缓存,再更新数据库
两个操作,如果中间执行过程中,缓存被删除,恰好有其他线程来读数据,缓存会被重新预热旧的数据。一般不推荐这种方案
3、先更新数据库,再删缓存。
可能会导致无效删除,但是删除本身具有幂等性。该方案成本最低,一般推荐该方案
4、借助消息中间件,对缓存的数据强制维护,但也只能保证最终一致性。
5、不管最终采用哪种方案,Key都要设置一个过期时间,借助自身的淘汰机制保证数据的更新。
1、先更新数据库,再更新缓存。
由于是两个操作,如果多线程并发情况下,很难保证线程之间的顺序,可能导致缓存的是旧数据。一般不推荐这种方案
2、先删除缓存,再更新数据库
两个操作,如果中间执行过程中,缓存被删除,恰好有其他线程来读数据,缓存会被重新预热旧的数据。一般不推荐这种方案
3、先更新数据库,再删缓存。
可能会导致无效删除,但是删除本身具有幂等性。该方案成本最低,一般推荐该方案
4、借助消息中间件,对缓存的数据强制维护,但也只能保证最终一致性。
5、不管最终采用哪种方案,Key都要设置一个过期时间,借助自身的淘汰机制保证数据的更新。
发布于:1个月前 (11-08) IP属地:四川省
我来回答
您需要 登录 后回答此问题!