springboot整合redisson分布式锁
synchronized是jvm级别的线程同步,当项目使用分布式、集群,就需要使用分布式锁
介绍
redisson锁
- 可重入锁(Reentrant Lock)
- 公平锁(Fair Lock)
- 联锁(MultiLock)
- 红锁(RedLock)
- 读写锁(ReadWriteLock)
- 信号量(Semaphore)
- 可过期性信号量(PermitExpirableSemaphore)
- 闭锁(CountDownLatch)
常用的锁
可重入锁加锁
1
2
3
4
5
6
7
8
9
10RLock lock = redissonClient.getLock("key");
// 加锁,一直等待加锁成功。
// 默认加锁30秒,如果当前线程处理时间过长,
// redisson会在锁时间过了三分之二的时候将锁的时间重新设置为30秒(看门狗机制)
lock.lock();
try{
// ...
}final {
lock.unlock();
}可重入锁尝试加锁
1
2
3
4
5
6
7
8
9
10RLock lock = redissonClient.getLock("key");
// 尝试加锁,最多等待时间10秒,如果10秒内未获取到锁返回false
boolean isLock = lock.tryLock(10, TimeUnit.SECONDS);
if(isLock){
try{
// ...
}final {
lock.unlock();
}
}联锁
1
2
3
4
5
6
7
8
9RLock lock1 = redissonClient.getLock("key1");
RLock lock2 = redissonClient.getLock("key2");
RLock multiLock = redissonClient.getMultiLock(lock1, lock2);
multiLock.lock();
try{
// ...
}final {
multiLock.unlock();
}
使用
引入依赖
1 |
|
配置
yml配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17spring:
redis:
host: localhost
port: 6379
database: 0
password:
timeout: 3000ms
redisson:
# 使用config配置,大部分使用默认配置。具体配置查看https://github.com/redisson/redisson/wiki/2.-Configuration
config: |
singleServerConfig:
address: "redis://${spring.redis.host}:${spring.redis.port}"
password: ${spring.redis.password}
database: ${spring.redis.database}
codec: !<org.redisson.codec.JsonJacksonCodec> {}
# 也可以通过指定redisson配置文件的位置,两种方式任选一种
# config: classpath:redisson.ymlredisson.yml配置文件
1 |
|
测试类
1 |
|