spring boot集成redis,以及配置database不生效问题

备注:记录一次spring-boot + redis 配置redis.database后,仍然使用db0默认库的情况。

springboot集成redis及相关问题

1. spring boot集成redis

redis集成依赖:

xml 复制代码
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- redis依赖commons-pool 这个依赖一定要添加 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>

redis配置

yaml 复制代码
spring:
  redis:
    host: xxxxx
    port: 6379
    password: xxxx
    database: 1
    jedis:
      pool:
        max-active: 10
        max-idle: 10
        min-idle: 0

序列化

java 复制代码
@Configuration
public class RedisConfig {
    /**
     * @Author: Huey
     * @Date: 2024/1/12 18:24
     * @Params:
     * @Return:
     * @Description: 初始化设置redis序列化类型,否则会出现乱码
     **/
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        //使用fastjson序列化
        FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
        // value值的序列化采用fastJsonRedisSerializer
        template.setValueSerializer(fastJsonRedisSerializer);
        template.setHashValueSerializer(fastJsonRedisSerializer);
        // key的序列化采用StringRedisSerializer
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setConnectionFactory(redisConnectionFactory);

        return template;
    }
}	

完成以上配置,即redis已经正常集成进入项目。

2. 集成redission redis分布式锁等快捷管理工具

集成依赖

xml 复制代码
  <!-- redis便捷分布式锁管理 -->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-boot-starter</artifactId>
            <version>${redisson.version}</version>
        </dependency>

配置注入

java 复制代码
@Configuration
public class RedissionConfig {
    @Value("${spring.redis.host}")
    private String redisHost;

    @Value("${spring.redis.password}")
    private String password;

    @Value("${spring.redis.port}")
    private int port;

    @Value("${spring.redis.database}")
    private int database;

    @Bean
    public RedissonClient getRedisson() {
        Config config = new Config();
        config.useSingleServer().
                setAddress("redis://" + redisHost + ":" + port)
                .setPassword(password)
        config.setCodec(new JsonJacksonCodec());
        return Redisson.create(config);
    }
}

示例

完成以上配置,即可正常使用了

java 复制代码
@Autowired
private RedissonClient redissonClient;

 RLock rLock = redissonClient.getLock(lockName);
 if (rLock.isLocked()) {
     //当前锁正在使用,当前用户还在同步订单,不处理业务
     logger.info("method handleReceiptMsg重复加锁,请求入参:{},不处理业务,当前锁状态:{}", JSONObject.toJSONString(payRqst), rLock.isLocked());
     return Result.error("handleReceiptMsg重复加锁");
 }
boolean isLocked = rLock.tryLock(RedisLockNameConstants.ORDER_SYNC_LOCK_TIME, TimeUnit.SECONDS);

3. 配置redis database不生效

如果是单独仅集成redis,database 配置是肯定生效的,因为没有影响,这里记录一个遇到的情景:

即:当spring-boot集成redis后,同时集成redission使用redis锁相关管理插件,此时,配置了RedissonClient,注入了Config配置,即第二部中的代码部分。而第一步中集成redis时,使用redistemplate仅仅只是对其做了序列化,至于redistemplate加载的配置,全靠程序默认加载,那么这里就涉及了一个加载顺序问题。

springboot 的 @Configuration 也会默认加载redis的配置,步骤二中构建RedissonClient时候,也构建了Config对象,这个里面会覆盖掉RedisConfig里的配置,所以,在构建RedissonClient时候,设置database即可生效。

java 复制代码
 @Bean
 public RedissonClient getRedisson() {
      Config config = new Config();
      config.useSingleServer().
              setAddress("redis://" + redisHost + ":" + port)
              .setPassword(password)
              //指定redis db库
              .setDatabase(database);
      config.setCodec(new JsonJacksonCodec());
      return Redisson.create(config);
  }
相关推荐
万物皆字节7 分钟前
Springboot3 自动装配流程与核心文件:imports文件
spring boot
问道飞鱼10 分钟前
【Springboot知识】Springboot结合redis实现分布式锁
spring boot·redis·分布式
码明11 分钟前
SpringBoot整合ssm——图书管理系统
java·spring boot·spring
Elastic 中国社区官方博客23 分钟前
使用 Elasticsearch 导航检索增强生成图表
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小金的学习笔记28 分钟前
RedisTemplate和Redisson的使用和区别
数据库·redis·缓存
取址执行30 分钟前
Redis发布订阅
java·redis·bootstrap
新知图书42 分钟前
MySQL用户授权、收回权限与查看权限
数据库·mysql·安全
文城5211 小时前
Mysql存储过程(学习自用)
数据库·学习·mysql
沉默的煎蛋1 小时前
MyBatis 注解开发详解
java·数据库·mysql·算法·mybatis
呼啦啦啦啦啦啦啦啦1 小时前
【Redis】事务
数据库·redis·缓存