-
方案一: 双写
操作:写数据库 -> 写缓存
问题: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. 加读写锁
-
总结
- 对于不要求强一致性的业务,给缓存设置过期时间是简单的方式
- 对于经常需要更新的数据,强一致性要求较高的,不使用缓存
- 读写锁保证一致性
- 阿里开源框架 canal
浙公网安备 33010602011771号