springboot集成redisson有两种方式,分别是集成redisson-spring-boot-starter或redisson-spring-data。由于作者的项目和redisson-spring-boot-starter有冲突,所以选择集成redisson-spring-data,下面介绍集成集成步骤,已单机版redis为列。
引用依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-27</artifactId>
<version>3.23.3</version>
</dependency>
根据官网说明,不同步的springboot版本引入不同版本的redisson-spring-data,如下
https://github.com/redisson/redisson/tree/master/redisson-spring-data
配置redisson
1、在classpath下添加redisson.yaml文件用于存放redisson的配置,更多配置参考官网
https://github.com/redisson/redisson/wiki/2.-Configuration
singleServerConfig:
address: redis://127.0.0.1:6379 #redis地址
database: 0 #Database index used for Redis connection
connectTimeout: 10000 #连接到任何Redis服务器时超时
timeout: 3000 #Redis服务器响应超时。Redis命令发送成功后开始倒计时。毫秒值
connectionPoolSize: 64 #Redis连接最大池大小
connectionMinimumIdleSize: 24 #最小空闲Redis连接量
idleConnectionTimeout: 10000 #如果池连接在超时时间内未使用,并且当前连接数量大于最小空闲连接池大小,则将关闭并从池中删除。毫秒值
retryAttempts: 3 #重试次数,如果在retryAttempts之后Redis命令不能被发送到Redis服务器,将会抛出错误。但如果发送成功,则会启动超时
retryInterval: 1500 #在此时间间隔之后,将执行另一次发送Redis命令的尝试。单位为毫秒
subscriptionConnectionPoolSize: 50 #Redis订阅连接最大池大小
subscriptionsPerConnection: 5 #每个Redis连接的订阅限制
subscriptionConnectionMinimumIdleSize: 1 #最小空闲Redis订阅连接数
dnsMonitoringInterval: 5000 #DNS变更监控周期。应用程序必须确保JVM DNS缓存TTL足够低以支持这一点。设置-1为禁用。代理模式下支持单个主机名的多个IP绑定
#password: null
#username: null
#clientName: null 客户端连接名称
#credentialsResolver: 默认空,定义在连接Redis服务器身份验证时调用的凭据解析器。每个Redis节点地址返回凭据对象,它包含用户名和密码字段。允许指定动态更改Redis凭据。
2、注册RedissonClient
@Configuration
public class RedissonSpringDataConfig {
@Bean
public RedissonConnectionFactory redissonConnectionFactory(RedissonClient redisson) {
return new RedissonConnectionFactory(redisson);
}
@Bean(destroyMethod = "shutdown")
public RedissonClient redisson(@Value("classpath:/redisson.yaml") Resource configFile) throws IOException {
Config config = Config.fromYAML(configFile.getInputStream());
return Redisson.create(config);
}
}
3、编写工具类
@Component
public class RedissonUtil {
private static RedissonClient redissonClient;
@Autowired
public void setRedissonClient(RedissonClient redissonClient) {
RedissonUtil.redissonClient = redissonClient;
}
/**
* key是否存在
* @param key
* @return
*/
public static boolean isExists(String key){
return redissonClient.getBucket(key).isExists();
}
/**
* 获取生命周期
* @param key
* @return
*/
public static long getExpireTime(String key){
return redissonClient.getBucket(key).remainTimeToLive();
}
/**
* 设置生命周期
* @param key
* @param time
* @return
*/
public static boolean setExpireTime(String key, Long expire){
return redissonClient.getBucket(key).expire(Duration.ofMillis(expire));
}
/**
* 保存字符串
* @param key
* @param value
*/
public static void setStr(String key, String value){
RBucket<String> rBucket = redissonClient.getBucket(key);
rBucket.set(value);
}
/**
* 保存字符串
* @param key
* @param value
* @param expire
*/
public static void setStr(String key, String value, Long expire){
RBucket<String> rBucket = redissonClient.getBucket(key);
rBucket.set(value, Duration.ofMillis(expire));
}
/**
* 查询字符串
* @param key
* @return
*/
public static String getStr(String key){
if(isExists(key)){
return null;
}
RBucket<String> rBucket = redissonClient.getBucket(key);
return rBucket.get();
}
/**
* 保存对象
* @param key
* @param value
* @param <T>
*/
public static <T> void setObject(String key, T value){
RBucket<T> rBucket = redissonClient.getBucket(key);
rBucket.set(value);
}
/**
* 保存对象
* @param key
* @param value
* @param expire
* @param <T>
*/
public static <T> void setObject(String key, T value, Long expire){
RBucket<T> rBucket = redissonClient.getBucket(key);
rBucket.set(value, Duration.ofMillis(expire));
}
/**
* 查询对象
* @param key
* @return
*/
public static <T> T getObject(String key){
RBucket<T> rBucket = redissonClient.getBucket(key);
return rBucket.get();
}
}