Spring Boot 整合Redisson配置篇

  1. Spring Boot 整合Redisson配置篇
  2. Spring Boot 整合Redisson操作Redis基础篇
  3. Redisson批量操作类RBuckets和管道利器RBatch

摘要:介绍在Spring Boot 中,如何整合Redisson。

综述

  Redisson是Redis官方推荐的Java版的Redis客户端。它提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。

  小编在《Spring Boot 整合Jedis连接Redis和简单使用》中,先介绍如何在Windows系统安装Redis环境,然后在Spring Boot 项目中集成 Jedis,最后简单地做了一个使用Jedis操作redis连接池的测试用例。本文介绍如何在Spring Boot项目中集成Redisson。

引入Maven依赖

Spring Boot版本: 2.5.x。

     <dependency>
         <groupId>org.redisson</groupId>
         <artifactId>redisson-spring-boot-starter</artifactId>
         <version>3.17.1</version>
     </dependency>

  集群模式除了适用于Redis集群环境,也适用于任何云计算服务商提供的集群模式,例如AWS ElastiCache集群版、Azure Redis Cache和阿里云(Aliyun)的云数据库Redis版。

YAML文件配置集群

  在YAML文件中添加如下集群化配置:

spring:
  redis:
    cluster:
      nodeAddresses: [
          "redis://127.0.0.1:7005",
          "redis://127.0.0.1:7004",
          "redis://127.0.0.1:7003",
          "redis://127.0.0.1:7002",
          "redis://127.0.0.1:7001",
          "redis://127.0.0.1:7000"
      ]
    password: 123456
    single:
      address: "redis://127.0.0.1:6379"
      database: 7

配置参数读取类

  先创建一个读取属性的类,通过注解@ConfigurationProperties读取YAML中定义的属性:


import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.io.Serializable;
import java.util.List;

@Data
@Component
@ConfigurationProperties(prefix = "spring.redis")
public class RedisConfigProperties implements Serializable {

    private static final long serialVersionUID = 8815222005846355408L;
    private String password;
    private cluster cluster;
    private Single single;

    public static class cluster {
        private List<String> nodeAddresses;

        public List<String> getNodeAddresses() {
            return nodeAddresses;
        }

        public void setNodeAddresses(List<String> nodeAddresses) {
            this.nodeAddresses = nodeAddresses;
        }

        @Override
        public String toString() {
            return "{" +
                    "nodeAddresses=" + nodeAddresses +
                    '}';
        }
    }
    public static class Single {
        private String address;
        public Integer database;

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }

        public Integer getDatabase() {
            return database;
        }

        public void setDatabase(Integer database) {
            this.database = database;
        }

        @Override
        public String toString() {
            return "Single{" +
                    "address='" + address + '\'' +
                    ", database=" + database +
                    '}';
        }
    }
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public RedisConfigProperties.cluster getCluster() {
        return cluster;
    }

    public void setCluster(RedisConfigProperties.cluster cluster) {
        this.cluster = cluster;
    }
}

  @ConfigurationProperties(prefix = "spring.redis")用于限制上述配置类只读取redis属性。

Redisson 客户端配置

  所有对Redisson的使用都是通过RedissonClient,调用如下方法 getRedissonClient() 创建出RedissonClient实例:

import lombok.extern.slf4j.Slf4j;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.client.codec.StringCodec;
import org.redisson.config.ClusterServersConfig;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.redisson.config.TransportMode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;
import java.util.List;
@Slf4j
@Configuration
public class MyRedissonConfig {
    @Autowired(required = false)
    private RedisConfigProperties redisConfigProperties;

    /**
     * 配置redisson集群
     * @return
     */
    @Bean(destroyMethod = "shutdown")
    public RedissonClient getRedissonClient() {
        List<String> clusterNodes = redisConfigProperties.getCluster().getNodeAddresses();
        log.info("【Redisson 配置】:{}", redisConfigProperties);

        Config config = new Config();
        //对象编码选择纯字符串编码
        config.setCodec(StringCodec.INSTANCE);
        ClusterServersConfig clusterServersConfig = config.useClusterServers()
                .addNodeAddress(clusterNodes.toArray(new String[clusterNodes.size()]));
        //设置密码
        clusterServersConfig.setPassword(redisConfigProperties.getPassword());
        //redis连接心跳检测,防止一段时间过后,与redis的连接断开
        clusterServersConfig.setPingConnectionInterval(32000);
        return Redisson.create(config);
    }

    /**
     * 单机配置
     * @return
     * @throws IOException
     */
   /* @Bean(destroyMethod = "shutdown")
    RedissonClient singleRedisson() throws IOException {
        log.info("【Redisson 配置】:{}", redisConfigProperties);
        // 创建配置
        Config config = new Config();
        config.setCodec(StringCodec.INSTANCE);
        config.setTransportMode(TransportMode.NIO);
        SingleServerConfig singleServerConfig = config.useSingleServer()
                .setAddress(redisConfigProperties.getSingle().getAddress())
                .setDatabase(redisConfigProperties.getSingle().getDatabase());

        return Redisson.create(config);
    }*/
}

  得到redisson对象,之后的分布式锁由redisson对象操作。节点地址nodeAddress一般为多个,这些配置信息放在yml中。java bean中已经给所有需要配置的属性写上了官方默认的初始值,你如果不考虑更改默认值,实际上只需要在application.properties添加redis连接地址就好:

#redis 单机地址
spring.redisson.address=192.168.1.204:6379

  配置了redisson的信息之后,就可以在项目中使用@Autowired注入org.redisson.api.RedissonClient(redisson提供的默认实现类是org.redisson.Redisson,且redisson-spring-boot-starter会自动往IOC容器中注册org.redisson.Redisson)。启动项目,在控制台将打印配置信息:

2022-05-03 10:51:32.102 [main] INFO -c.c.i.m.xxx.MyRedissonConfig - 【Redisson 配置】:RedisConfigProperties(password=123456, cluster={nodeAddresses=[redis://127.0.0.1:7005, redis://127.0.0.1:7004, redis://127.0.0.1:7003, redis://127.0.0.1:7002, redis://127.0.0.1:7001, redis://127.0.0.1:7000]}, single=Single{address='redis://127.0.0.1:6379', database=7})

  由此可见,配置类已经成功加载YAML中的配置信息。

知行合一

  整合Redisson后,可用的 Spring Beans包括如下几个:

  • RedissonClient
  • RedissonRxClient
  • RedissonReactiveClient
  • RedisTemplate
  • ReactiveRedisTemplate

  下面提供一个使用Bean RedissonClient操作String的示例:

    @Autowired
    private RedissonClient redissonClient;

    private static void demo() {
        RBucket<Object> bucket = redissonClient.getBucket("string-demo");
        bucket.set("hello");
        System.out.println(bucket.get());
    }

结束语

  本文主要为大家介绍了在spring boot中,集成redisson的最佳实践。有需要的朋友可以拿来即用,希望能够对大家有所帮助。

  “我亦无他,惟手熟尔。”合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!祝各位早日升职加薪!

Reference

posted @ 2022-05-10 20:39  楼兰胡杨  阅读(23537)  评论(0编辑  收藏  举报