前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Redisson 实现的 redis 分布式锁在 SpringBoot 中的简单使用

使用 Redisson 实现的 redis 分布式锁在 SpringBoot 中的简单使用

作者头像
北漂的我
发布2020-10-26 17:12:45
4.8K0
发布2020-10-26 17:12:45
举报
文章被收录于专栏:北漂的我北漂的我北漂的我

使用 SpringBoot 2.3 创建一个web项目

1. 使用 redisson-spring-boot-starter 集成

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.13.4</version>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.70</version>
</dependency>

2. redisson 可以使用 SpringBoot 本身的redis配置, 也可以使用redisson的redis配置, 参考这里

我使用SpringBoot的redis的单机配置.

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.database=0
spring.redis.timeout=3s
spring.redis.ssl=false

3. 配置 RedisTemplage

@SpringBootConfiguration
public class RedisConfig {

	@Bean
	public RedisTemplate<String, Object> redisTemplate(RedissonConnectionFactory redissonConnectionFactory){
		RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
		redisTemplate.setKeySerializer(new StringRedisSerializer());
		redisTemplate.setValueSerializer(new GenericFastJsonRedisSerializer());
		redisTemplate.setHashKeySerializer(new StringRedisSerializer());
		redisTemplate.setHashValueSerializer(new GenericFastJsonRedisSerializer());
		redisTemplate.setConnectionFactory(redissonConnectionFactory);
		return redisTemplate;
	}
}

4. 配置 RedissonClient

@SpringBootConfiguration
public class RedissonConfig {
	
	@Value("${spring.redis.host}")
	private String redisHost;
	@Value("${spring.redis.port}")
	private String redisPort;
	
	@Bean
	public RedissonClient redissonClient() {
		Config config = new Config();
//		config.useSingleServer().setAddress("redis://127.0.0.1:6379");
		config.useSingleServer().setAddress("redis://" + redisHost + ":" + redisPort);
		return Redisson.create(config);
	}
}

5. 分布式锁的基本使用

RLock lock = redissonClient.getLock("lock-1");
try {
	boolean tryLock = lock.tryLock(6, 5, TimeUnit.SECONDS);
	if(tryLock) {
		System.out.println("******************** Business ********************");
	}
} catch (InterruptedException e) {
	e.printStackTrace();
} finally {
	if(lock.isHeldByCurrentThread()) {   // 获取锁的线程才能解锁
		lock.unlock();
	} else {
		// 没有获得锁的处理
	}
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

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