vlambda博客
学习文章列表

redis缓存更新策略

场景:数据库表中存放了用户信息,包括用户名、手机号,用户信息在redis中也缓存了一份;用户修改手机号,需要更新redis缓存………

 

1.先操作缓存, 再更新数据库

/*

操作步骤

*1.让缓存失效(delete,根据情况,查询缓存时需配合缓存击穿解决方案),

*或者更新缓存(update)

*2.更新数据库

*

问题分析

*1)当操作1失败,操作2也失败时。数据不变,一致性不受影响

*2)当操作1失败,操作2成功时,如果不加补偿策略,数据一致性受影响(可采用最  终一致性方案,异步的将数据库中的数据更新到缓存)

*3)当操作1成功,操作2失败时,如果操作1采用的是delete,那么需配合缓存击穿解决方案可以让数据回到原始状态,如果1操作采用的是update,那么数据一致性受影响

* 4)当操作1成功,操作2也成功时,如果操作1采用的是delete,那么并发时(操作2没有提交,就已经有线程来查询缓存,可能回设缓存的还是老数据),数据一致性受影响

*/

 

2.先更新数据库,再操作缓存

/*

操作步骤

*1.更新数据库

*2.让缓存失效(delete,根据情况查询缓存时需配合缓存击穿解决方案)

* 或者更新缓存(update)

*

* 问题分析

*1)当操作1失败时,不执行操作2,数据一致性不受影响

*2)当操作1成功,操作2失败时,如果不采用补偿措施,数据一致性受影响。

* 如果采用补偿措施(可采用最终一致性方案,异步的将数据库中的数据更新到缓存),数据会短暂的不一致,但最终会一致

*3)当操作1成功,操作2也成功时,数据一致,且是最新数据。(但在操作2成功,操作1还没有完成时,就已经有线程来查询缓存,此时也会读到老数据)

*/


总结:采用先更新数据库,再操作缓存的策略