基于Redis实现分布式锁
2022/1/12 2:36:13
本文主要是介绍基于Redis实现分布式锁,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
添加Redis的POM依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
使用自动装配引入 redis的 redisTemplate这里使用的是 StringRedisTemplate,
@Autowired private StringRedisTemplate redisTemplate;
实现
//基于 Redis 实现分布式锁 public void testLock() { //加锁 Boolean lock = this.redisTemplate.opsForValue().setIfAbsent("lock", "111"); //setIfAbsent 对应 setnx,只能设置为空的key if (!lock){ try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } this.testLock(); }else{ //获取锁,执行业务操作 String num = this.redisTemplate.opsForValue().get("num"); if (StringUtils.isBlank(num)){ this.redisTemplate.opsForValue().set("num","1"); return; } int i = Integer.parseInt(num); this.redisTemplate.opsForValue().set("num",String.valueOf(++i)); //释放锁 this.redisTemplate.delete("lock"); } } //循环哪里使用while也可以,稍微改一下就行 //实现不够完整,还有部分优化空间,例如防止死锁:客户端获取到锁之后,服务器立马宕机, 解决方式:给key添加过期时间(需要保证原子性) // 原子性 加锁和过期时间: set k v ex 3 nx nx 表示key不存在时设置 xx 表示值存在时设置
这篇关于基于Redis实现分布式锁的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-08阿里云Redis项目实战入门教程
- 2024-11-08阿里云Redis资料:新手入门与初级使用指南
- 2024-11-08阿里云Redis教程:新手入门及实用指南
- 2024-11-07阿里云Redis学习入门:新手必读指南
- 2024-11-07阿里云Redis学习入门:从零开始的操作指南
- 2024-11-07阿里云Redis学习:初学者指南
- 2024-11-06阿里云Redis入门教程:轻松搭建与使用指南
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作
- 2024-10-22Redis缓存入门教程:快速掌握Redis缓存基础知识