本文章转自:乐字节
文章次要解说:Redis分布式锁用法
获取更多Java相干材料能够关注公众号《乐字节》 发送:999
在微服务中很多状况下须要应用到分布式锁性能,而目前比拟常见的计划是通过Redis来实现分布式锁,网上对于分布式锁的实现形式有很多,晚期次要是基于Redisson等客户端,但在Spring Boot2.x以上版本中应用Redis时,其客户端库曾经默认应用lettuce。
所以本文将间接介绍在Spring Boot2.x以上我的项目中疾速应用Redis分布式锁的性能的办法,心愿可能更新你的知识库!
Redis分布式锁原理概述
实际上Redis服务自身并不提供分布式锁这样的机制,然而作为全局Key-Value存储系统,客户端能够利用Redis提供的基本功能并通过肯定的算法设计来实现分布式锁性能。目前已有不少博客文章及代码库形容了如何应用Redis来实现分布式锁,然而许多实现绝对比较简单,安全性也比拟低。
在Redis的官网文档中举荐了一种叫做RedLock的算法来实现基于Redis的分布式锁性能,现阶段已存在基于该算法的多种语言版本的Redis客户端实现库。其中Java畛域最为出名的是Redisson库。但因为Redisson不仅实现了分布式锁性能,还额定实现了一套Redis分布式数据结构,因而会显得比拟重,加上最新的基于Spring Boot.2.x以上版本应用Redis时,其客户端库曾经默认应用了lettuce(比Redisson、Jedis线程更平安、更轻量级的一种Java Redis客户端库)的封装,所以为了更加合乎微服务场景下的应用,在实践中往往会抉择基于RedLock算法自行实现分布式锁。
本案例也将演示如何RedLock算法来实现Redis分布式锁性能,不过在此之前让咱们先来看看RedLock算法是如何运行的,示意图如下:
以上就是实现Redis分布式锁官网举荐的RedLock算法逻辑,它是一种多节点Redis的分布式锁算法,能够无效避免单节点故障问题。其执行步骤阐明如下:
实现上述算法的Redis客户端能够基本上保障分布式锁的有效性及安全性的几个根本个性要求:
Spring Boot集成应用形式
通过后面内容的形容,置信你对实现Redis分布式锁的根本算法应该有了肯定的意识和了解。而在实际的过程中能够根据该算法自行定制实现,但实际上Spring早就提供了基于该算法的Redis的分布式锁的实现。其具体应用步骤如下:
1)在工程pom.xml文件中引入Spring Integration依赖,代码如下:
目前Spring所提供的分布式锁相干的代码被迁徙在Spring Integration子项目中,所以这里引入其相干依赖。
2)编写RedisLock的配置类,代码如下:
以上配置代码加载的前提在于利用曾经集成了Redis服务拜访链接信息,具体Spring Boot我的项目集成Redis拜访的形式比较简单能够参考其余材料。
3)分布式锁的具体应用形式,代码片段如下:
上述代码为订单防重时应用Redis散布锁的示例代码,通过依赖注入RedisLockRegistry实例来实现分布式锁的相干操作,例如obtain()办法创立锁、tryLock()持有锁及unlock()开释锁等。
感激大家的认同与反对,小编会继续转发《乐字节》优质文章