赞
踩
在springboot这种单例模式下,本地锁只能锁住当前线程,当其他服务的请求过来时是锁不住的,这时就需要使用分布式锁。
每个服务只放行一个请求过来,也大大减少了数据库的压力,这种方式可行吗?不行!如果每个服务的请求都是读数据库的话,每个服务都放行一个请求来构建缓存,没有太大问题,确实大大减少了数据库的压力。 但是!如果有两个请求是往数据库写数据,就会导致其他服务的内存与数据库的数据不一致性。
当第一个请求往数据库写数据,然后去替换缓存,这时由于网络原因,第二个请求过来,又更改了数据库,往缓存中写入了数据,这时第一个请求写入缓存覆盖了第二个请求写入缓存的数据,就会导致数据的不一致性。
当请求过来时,先在方法中加上本地锁,拿到锁之后判断缓存中是否有数据,有数据直接返回释放掉锁,没有数据查询数据库。
上面的两张图,看见输出了两次查询了数据库可以可以看见,我们的本地锁实效了 没有锁住本地线程只放行一个请求去查询数据库,而是放了两个请求去查询数据库。 原因是没有保持查询数据库和刷新声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。