关于缓存的一些总结(4)

使用锁来解决缓存击穿问题
一提起锁大家可能都想到使用synchronized或者Lock这样的锁。
在合理利用到synchronized时,springboot中的组件都是单例的,貌似没有问题,但很多的问题都出现在分布式部署上,比如有一个商品服务,被部署在了多台服务器上。


image.png

虽然每个服务都被加了锁,但是多个服务却用的不是同一把锁,所以我们要解决分布式锁的问题。
在测试这些问题时有一个小的技巧,可以在idea中将相同的服务,复制多份,然后在设置的地方设置好端口号就可以了。


image.png

当然,测试的时候就不能访问某个单独的服务了,而应该访问负载均衡设置的端口,比如:80端口
测试发现,如果启用了三个服务,会查询三次数据库,这个是不被允许的。
所以需要使用到分布式锁,以下是分布式锁的运行原理:
image.png

但是使用redis进行加锁和解锁时,还需要考虑到高并发的情况,所以可以使用redis API中的原子加锁,原子解锁。
虽然可以费一些功夫编写代码,但我们有更好的工具,所以随后学习使用工具类将代码化繁为简。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容