解决缓存与数据库一致性问题

1、引用缓存的好处

        1)提高性能;2)减缓数据库压力;3)提高系统并发处理能力

2、引用缓存的问题

        1)处理逻辑变得复杂;2)使用不当,容易引起缓存和数据库数据不一致的问题

3、数据不一致的原因

        缓存操作与数据库操作不是原子操作,当一方操作成功、另一方操作失败时就会造成数据不一致问题

4、不同情况下常用处理方法

        1)简单逻辑处理:与数据库简单的一次性交互,可根据数据库/缓存的操作结果,来判断缓存/数据库是否要执行相应操作,如图:

a、增:db-->cache:数据库插入成功,添加到缓存

b、删:cache-->db:先删缓存,在删数据库

c、改:db-->cache:先改数据库,在改缓存

d、查:cache-->db-->cache:先查缓存,没有则查库添加到缓存


2)复杂逻辑处理:一个service中有多次数据库交互,并且由于spring事务传播性不同有时只在最外层事务提交时提交(spring默认事务传播性)

a、增:db:只插入数据库

b、删:cache-->db:先删缓存,再删数据库

c、改:cache-->db:先删缓存,再删数据库

d、查:cache-->db-->cache:先查缓存,没有则查库添加到缓存

注:

1)还可以通过设置标志位,在外层回滚缓存的做法,由于该方法会使缓存操作与业务操作耦合性过大,此处不做介绍;

2)如上操作cache与db的理由,未详细解释,如有需要可回复评论探讨;

3)该篇博文主要用于讨论解决数据库与缓存不一致问题,对于高并发下造成的线程安全问题,后续讨论。。。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值