前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从0到1带你实现一个分布式锁组件

从0到1带你实现一个分布式锁组件

原创
作者头像
第七人格
发布2024-07-01 13:40:33
580
发布2024-07-01 13:40:33
举报
文章被收录于专栏:中间件开发中间件开发

✨这里是第七人格的博客✨小七,欢迎您的到来~✨

🍅系列专栏:中间件开发🍅

✈️本篇内容: 分布式锁组件✈️

🍱 本篇收录完整代码地址:https://gitee.com/diqirenge/seven-lock-starter 🍱

楔子

几年以前小七在面试的时候,和面试官探讨过一个重复造轮子的事情。比如今天的主角——分布式锁,市面上有很多成熟的解决方案,包括框架、组件等,其中Redisson关于锁的实现也非常的完美了。今天我们就基于Redisson封装一个我们自己的分布式锁starter组件。

需求背景

公司关于分布式锁的实现五花八门,虽然都是基于redis实现的,但是有的项目用的Redisson,有的项目用的RedisTemplate,有的项目两个都在混用,

且使用方式都是直接调用的框架的API,有些小伙伴面对各种各样的分布式锁实现方式,一脸懵逼,不知道如何下手,甚至使用错误的情况也不在少数。

为了解决这个问题,我们计划统一技术栈,使用Redisson实现分布式锁,并提供一个基于Redisson实现的分布式锁的框架封装。

方案设计

为了方便各个系统更好的接入新的分布式锁组件,我们计划如下:

1、基于Spring boot starter封装,接入方只需要引入依赖,替换调用方法即可

2、尽量少的配置改动,如果项目以前有使用Redisson,甚至不修改配置,也可以使用

兼容方案如图所示:

开发环境

名称

版本

JDK

1.8

Redis

7.2.0

redisson-spring-boot-starter

3.15.4

spring-boot-configuration-processor

2.3.5.RELEASE

spring-boot-autoconfigure-processor

2.3.5.RELEASE

分支名称

master

分支地址

https://gitee.com/diqirenge/seven-lock-starter

代码实现

1、添加Maven依赖

2、新建一个类DistributedLockProperties,用于存储和获取分布式锁的超时时间配置。

3、编写DistributedLockRedissonAutoConfiguration,该类继承了Redisson的相关配置,并且引入了上面我们自己的配置

4、定义分布式锁接口

5、使用Redisson实现分布式锁接口

6、自定义分布式锁异常类

7、在spring.factories中指明组件自动配置类

8、执行Maven打包/上传命令

测试工程代码实现

1、引入依赖

2、加入配置

3、编写测试用的Controller

4、编写启动类

5、测试

启动项目后先请求http://localhost:8080/query?userId=123,5秒内再次请求http://localhost:8080/query?userId=123,返回

请求过于频繁,请稍候重试

总结

本文通过详细的步骤和代码示例,展示了如何从零开始实现一个基于Redisson的分布式锁组件,并提供了封装和测试方案。读者可以直接用于生产。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 楔子
  • 需求背景
  • 方案设计
  • 开发环境
  • 分支名称
  • 分支地址
  • 代码实现
  • 测试工程代码实现
  • 总结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档