Redisson,最出名的莫过于扩展了Redis应有的功能,提供了简而易用的分布式锁。
更多详细介绍不作赘述。详见官网:Redisson: Easy Redis Java client with features of In-Memory Data Grid
1.引入Redisson依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.27.2</version>
</dependency>
2.配置文件
spring:
redis:
password: your password
timeout: 60s
connect-timeout: 30s
database: 0
sentinel:
master: mymaster
nodes: 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381
password: your password
lettuce:
pool:
max-active: 10
max-idle: 3
max-wait: -1
min-idle: 1
3.配置Java Config
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.SentinelServersConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.stream.Collectors;
@Configuration
public class RedissonLockConfig {
@Bean
public RedissonClient redissonClient(org.springframework.boot.autoconfigure.data.redis.RedisProperties properties) {
Config config = new Config();
SentinelServersConfig sentinelServersConfig = config.useSentinelServers();
if (properties.getTimeout() != null) {
sentinelServersConfig.setTimeout((int) properties.getTimeout().toMillis());
}
if (properties.getConnectTimeout() != null) {
sentinelServersConfig.setConnectTimeout((int) properties.getConnectTimeout().toMillis());
}
sentinelServersConfig.setPassword(properties.getPassword())
.setCheckSentinelsList(false)
.setDatabase(properties.getDatabase())
.setMasterName(properties.getSentinel().getMaster())
.setSentinelPassword(properties.getSentinel().getPassword())
.setSentinelAddresses(properties.getSentinel().getNodes().stream().map(url -> {
if (url.startsWith("redis://") || url.startsWith("redisson://")) {
return url;
}
return "redis://" + url;
}).collect(Collectors.toList()));
return Redisson.create(config);
}
}
3.使用
RLock lock = redissonClient.getLock("redisson-test-lock");
try {
lock.lock();
System.err.println("locking...");
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
lock.unlock();
}