一、关于 Redisson
- 基于java框架netty进行扩展了的redis客户端
- 实现了分布式和可拓展的数据结构
- API是线程安全的,所以可以操作单个Redisson连接来完成各种操作
- 加锁逻辑都是通过lua脚本来完成的,lua脚本执行能够保证原子性, 锁为可重入锁
二、使用
1. Spring Boot 引入依赖
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.11.6</version>
</dependency>
2. 配置,主要配置方式为
a. 程序化配置
b. JSON 文件引入
c. YAML 文件引入
这里启用第一种配置方式, 更多参数配置参考:Redisson配置方法
package com.sf.vsolution.hn.iwms.redis;
import cn.hutool.core.util.StrUtil;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RedissonConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private String port;
@Value("${spring.redis.timeout}")
private Integer timeout;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.database}")
private Integer database;
// 单节点
@Bean
@ConditionalOnProperty(name = "spring.redis.mode", havingValue = "single")
public RedissonClient getRedisson() {
Config config = new Config();
// 单节点模式
SingleServerConfig serverConfig = config.useSingleServer().setAddress("redis://" + host + ":" + port)
.setTimeout(timeout)
.setDatabase(database);
if (StrUtil.isNotBlank(password)) {
serverConfig.setPassword(password);
}
return Redisson.create(config);
}
// 集群
@Bean
@ConditionalOnProperty(name = "spring.redis.mode", havingValue = "cluster")
public RedissonClient redissonClientCluster() throws IOException {
String[] nodes = urls.split(",");
for