• 方案一: 双写

     操作:写数据库 -> 写缓存

     问题:2个请求A, B;  A写数据库,B写数据库,因网络延迟等,B先写缓存,A写缓存   导致了数据的不一致性

     解决: 1,加锁: A写数据库,A写缓存一起执行   2, 业务是否允许一段时间的不一致,缓存设置失效时间为业务所允许的时间范围(保证最终一致性)

 

  • 方案二:失效

    操作:写数据库 -> 删缓存

    问题:3个请求A,B,C;A写数据,A删缓存,B写数据(网络延迟等) ,C读数据(此时C读到A写的数据), B写数据,B删数据,C写缓存  导致了数据的不一致性

    解决:1. 加读写锁

  • 总结

  1.   对于不要求强一致性的业务,给缓存设置过期时间是简单的方式
  2.  对于经常需要更新的数据,强一致性要求较高的,不使用缓存
  3.  读写锁保证一致性
  4.  阿里开源框架  canal
posted on 2020-08-13 15:24  yang希军  阅读(404)  评论(0)    收藏  举报