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);
  }
相关推荐
摇滚侠3 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 32
spring boot·笔记·后端
袋鼠云数栈4 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛139246256735 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛139246256735 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
倔强的石头_7 小时前
事务边界与批量写入:避免长事务、锁等待和日志压力
数据库
努力努力再努力wz7 小时前
【Redis入门系列】从 KEYS 到 SCAN:渐进式遍历、Cursor 与位反转原理
数据库·redis·缓存
坐吃山猪8 小时前
【多线程】Lock与Condition
大数据·数据库
互联网叫兽8 小时前
redis深入学习一
redis
Lightpwd8 小时前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
数据库·后端
LabVIEW开发8 小时前
LabVIEW 64位安装的位深陷阱:工具包、内存与工程兼容
数据库·labview·labview知识·labview功能·labview程序