Spring-BootSpringBoot极简教程 · Spring Boot

Spring Boot 2实现分布式锁——这才是实现分布式锁的正

2019-04-09  本文已影响73人  周立_itmuch

都9102年了,你还在手写分布式锁吗?

经常被问到”如何实现分布式锁”,看来这是大家的一个痛点。

其实Java世界的”半壁江山”——Spring早就提供了分布式锁的实现。早期,分布式锁的相关代码存在于Spring Cloud的子项目Spring Cloud Cluster中,后来被迁到Spring Integration中。

TIPS

这就是明明 Spring Cloud官方 说自己实现了 Global Locks ,但又无法找到任何相关文档的原因——人家早把相关代码搬迁到Spring Integration了。

可能有不少童鞋对Spring Integration不是很熟悉,简单介绍一下——官方说法,这是一个 企业集成模式 的实现;通俗地说,Spring Integration的定位是一个轻量级的ESB,尽管它做了很多ESB不做的事情。顺便说一下,Spring Cloud Stream的底层也是Spring Integration。

Spring Integration提供的全局锁目前为如下存储提供了实现:

它们使用相同的API抽象——这正是Spring最擅长的。这意味着,不论使用哪种存储,你的编码体验是一样的,有一天想更换实现,只需要修改依赖和配置就可以了,无需修改代码

TIPS

实现无关性:举个例子,你目前有一个基于Redis的分布式锁,但有一天想讲存储改为Consul。此时,统一的API至关重要——我相信你不会希望仅仅是修改了分布式锁的存储,就得让开发把相关代码翻新一遍

大学的时候,不也讲过面向接口编程的重要性嘛。

因此,即使Spring Integration没有为您使用的存储提供实现(例如Consul),你也应该基于Spring Integration的API去开发。这样未来的某一天,一旦Spring Integration为你的存储提供支持,你就可以无痛切换啦

编码

下面以Redis为例,讲解Spring Integration里面如何使用分布式锁。

测试

至此,是不是让你有删掉手写的那些蹩脚的分布式锁的冲动呢?

配套代码

GitHub:https://github.com/eacdy/spring-boot-study/tree/master/spring-boot-lock-redis

Gitee:https://gitee.com/itmuch/spring-boot-study/tree/master/spring-boot-lock-redis

本文首发

http://www.itmuch.com/spring-boot/global-lock/

关注我

img
上一篇 下一篇

猜你喜欢

热点阅读