我是靠谱客的博主 活力芒果,最近开发中收集的这篇文章主要介绍Spring cloud项目扩展(三)项目集成redis分布式锁,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

​上一篇中,我们在springcloud项目中集成了redis,这一篇通过redis来实现分布式锁。锁的基本概念可以自行百度,最通俗的意思是,在一条路上安装一个门,这个门同时只允许一个线程通过,每个线程通过的时候都在这个门上加一把锁,线程结束解锁后才允许处理别的线程。springcloud项目一般都是采用多节点部署,当两个又互斥性的操作同时进行时,就需要加锁来保证数据的准确性,类似于数据的事务。通过锁保证read和write是一个原子性的操作,不允许在read和write的过程中有其他对数据的操作。话不多说,直接开始。

1,启动我们的redis,测试启动成功。

2,依旧以我们的example-service项目为例。创建lock包和实现包impl,并创建接口Lock和接口实现LockImpl,目录结构如图。

3,项目中引入jar包

4,写锁的接口。加锁,解锁和自旋锁。所谓的自旋锁就是再未获得锁的时候循环直到获取锁为止。

5,下面是对锁的实现。

6,在controller中创建两个方法用来测试。

7,使用postman创建两个请求进行测试。

8,看日志输出结果,证明锁的存在。

在写这个锁的时候遇到一些问题。在测试的时候发现,如果在单元测试中启动线程进行测试,则会报与redis server连接超时。网上解释说是由于springboot2.x 客户端使用的lettuce实现导致的。到最后依然没有解决这个问题。 使用dedisclient不会出现这个问题。代码和测试方式在example-web中有实现。

关注公众号:直立行走的程序猿

公众号回复springcloud获得git的源码下载地址。

最后

以上就是活力芒果为你收集整理的Spring cloud项目扩展(三)项目集成redis分布式锁的全部内容,希望文章能够帮你解决Spring cloud项目扩展(三)项目集成redis分布式锁所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部