背景:比如我们有三个系统服务,然后由于某个数据从来没请求过,现在三个系统并发对该数据进行请求和修改的时候就会出现并发竞争问题了,当然由于redis的单线程结构其实这里不存在锁和阻塞问题,这里的问题是可能出现老数据覆盖新数据的问题。
解决方案:
利用分布式锁(zk或者redis)做门,只有一个服务可以进行开门尝试,并且需要用自己的钥匙去匹配,匹配成功再去做下面操作
只有成功获取锁的系统可以进行修改并且要带上数据的版本号,我们要做cas和自旋(自行参考aotomicinteger修改数据方法的源码(compareAndSwap
))只有到了这个版本号才进行修改