当前位置: 首页 > news >正文

java通过redis简单实现分布式锁

目录

一、简介

二、代码实现

1、maven添加依赖

2、核心逻辑代码

3、使用方式

三、总结


一、简介

我们知道在Java中可以通过关键字synchronized来防止并发引起的问题,而分布式中就需要考虑分布式锁了,今天来讲一个比较简单的实现,通过redis实现分布式锁,为什么要用redis呢?因为redis很快,还有很多优点,具体可以查看我历史写的文章---------------深入了解Redis:性能、应用场景与常见问题解决方案_redis应用场景及出现的问题-CSDN博客

二、代码实现

1、maven添加依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

2、核心逻辑代码


/*** 通过redis简单实现分布式锁* @author zengLingYao* @date 2025/8/27 21:16*/
@Component
public class ZengLingYaoService {@Resourcepublic RedisTemplate redisTemplate;/*** 获取锁* 成果获取锁,返回true* 失败返回false* @param key 锁标识用于区分不同锁* @param timeout 有效时间* @param timeUnit 时间单位*/public Boolean tryLock(String key, long timeout, TimeUnit timeUnit){return redisTemplate.opsForValue().setIfAbsent(key, "1", timeout, timeUnit);}/*** 解锁* @param key 锁标识用于区分不同锁*/public void unlock(String key) {redisTemplate.delete(key);}}

3、使用方式

    /*** 演示使用分布式锁*/public void zengLingYao(String id) {boolean getLock = zengLingYaoService.tryLock(id, 180, TimeUnit.SECONDS);if (!getLock) {throw new RuntimeException("别人也在操作,你等会再试");}try {// 执行业务逻辑}finally {zengLingYaoService.unlock(id);}}

三、总结

1、setIfAbsent是原子性操作所以不会并发

2、key用来区分不同业务

3、设计过期时间,避免了死锁情况

http://www.dtcms.com/a/356102.html

相关文章:

  • 【MySQL数据库】存储引擎 学习记录
  • 深度学习进阶
  • B站 XMCVE Pwn入门课程学习笔记(8)
  • Mybatis中缓存机制的理解以及优缺点
  • 详解 外部负载均衡器 → Ingress Controller Pod 这个过程
  • LCEDA电气规则
  • HTTPS的底层是怎么做的,使得数据更安全
  • 【python】python进阶——with关键字
  • 一个格式化方法一个打印语句完成一个基本日历展示,完成完美『终端呈现』(迭代升级)(彩色·Python)
  • 刀客doc:Instagram会成为Meta广告业务的第二曲线吗?
  • 机器视觉学习-day05-ROI切割
  • 博创软件慧云台庙务管理系统产品优势分析
  • Java -- 文件基础知识--Java IO流原理--FileReader
  • Makefile的使用
  • 进程组 会话 作业控制 守护进程
  • LeetCode 100 -- Day7
  • JDK8升级到JDK17的注意事项
  • @RequiredArgsConstructor 和构造同时使用,注入会不会导致空指针
  • Dify 中的 Signal Killed 问题排查指南
  • 强化学习入门专栏目录
  • 2002-2020年全国投入产出表数据
  • 【C++八股文】操作系统篇
  • C语言 部分内存相关的库函数
  • 广东省省考备考(第八十九天8.28)——判断推理(听课后强化训练)
  • 事务的五大状态
  • QT LInux 开发中一些常用的方法
  • CVPR小模型创新点深度分析:小VLM化身精准向导,大模型多模态推理效率全面加速,性能突破不再依赖算力堆叠
  • 8.28作业
  • Android 编写高斯模糊功能
  • Github上传READ.md后出现不识别换行符的问题