Bootstrap

springboot集成redisson

        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();
    }
}

;