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

来源:互联网 发布:陕西干部网络培训网 编辑:程序博客网 时间:2024/05/01 04:32

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 0
原创粉丝点击