您的位置:

Redisson配置详解

一、Redisson配置类

在使用Redisson之前,需要首先将Redisson的配置信息进行初始化。Redisson提供了很多种方式来实现配置信息的初始化,其中最为常用的是通过创建Config对象来设置Redisson的配置信息。创建Config对象有两种方式,一种是通过代码创建,另一种是通过读取配置文件创建。

代码创建Config对象的方式如下:

// 创建单机模式配置对象
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);

配置文件创建Config对象的方式如下:

# 创建单机模式配置对象
singleServerConfig:
  address: "redis://127.0.0.1:6379"
RedissonClient redisson = Redisson.create(Config.fromYAML(new ClassPathResource("redisson-single.yml").getInputStream()));

二、Redisson配置读取不到

如果在通过配置文件创建Config对象时,程序运行过程中出现了无法读取配置文件的情况,可以在创建Config对象时先打印日志查看读取了哪些配置文件,以及读取的文件路径是否正确。代码如下:

// 打印日志
Config config = Config.fromYAML(new ClassPathResource("redisson-single.yml").getInputStream());
log.info("配置文件路径:" + config.toYAML());
// 创建RedissonClient
RedissonClient redisson = Redisson.create(config);

三、Redisson配置集群

在Redisson中,可以使用多种方式创建Redis的集群。在代码创建Config对象时,可以使用useClusterServers()方法来创建集群配置对象。在配置文件创建Config对象时,则需要按照以下方式进行配置。

# 集群模式配置
clusterServersConfig:
  nodeAddresses:
      - "redis://127.0.0.1:6379"
      - "redis://127.0.0.1:6380"
      - "redis://127.0.0.1:6381"
RedissonClient redisson = Redisson.create(Config.fromYAML(new ClassPathResource("redisson-cluster.yml").getInputStream()));

四、Redisson配置文件

在使用Redisson时,除了可以通过代码的方式来初始化Redisson的配置信息外,还可以通过配置文件来进行配置。Redisson支持多种配置文件格式,例如properties、json、yml等。以下是一个Redisson的yml配置文件示例:

# 单节点信息配置
singleServerConfig:
  address: "redis://127.0.0.1:6379"
  connectionPoolSize: 64
  connectionMinimumIdleSize: 32
  slaveConnectionPoolSize: 250
  masterConnectionPoolSize: 250
  readTimeout: 10000
  connectTimeout: 10000
  timeout: 3000
  retryAttempts: 3
  retryInterval: 1500

# 集群信息配置
# clusterServersConfig:
#   nodeAddresses:
#     - "redis://127.0.0.1:6379"
#     - "redis://127.0.0.1:6380"
#     - "redis://127.0.0.1:6381"
#   scanInterval: 1000

# 哨兵模式配置
# sentinelServersConfig:
#   masterName: myMaster
#   sentinelAddresses:
#     - "redis://127.0.0.1:26379"
#     - "redis://127.0.0.1:26380"
#     - "redis://127.0.0.1:26381"
#   masterConnectionPoolSize: 250
#   slaveConnectionPoolSize: 250
#   readTimeout: 10000
#   connectTimeout: 10000
#   timeout: 3000
#   retryAttempts: 3
#   retryInterval: 1500

# Redisson配置项
# threads: 16

五、Redisson配置哨兵

在使用哨兵模式时,需要创建SentinelServersConfig对象,并将其设置为Config对象的配置信息。代码创建SentinelServersConfig对象的方式如下:

SentinelServersConfig sentinelConfig = new SentinelServersConfig();
sentinelConfig.setMasterName("mymaster");
sentinelConfig.addSentinelAddress("redis://127.0.0.1:26379");
sentinelConfig.addSentinelAddress("redis://127.0.0.1:26380");
sentinelConfig.addSentinelAddress("redis://127.0.0.1:26381");
config.useSentinelServers().setMasterName("mymaster")
                .addSentinelAddress("redis://127.0.0.1:26379")
                .addSentinelAddress("redis://127.0.0.1:26380")
                .addSentinelAddress("redis://127.0.0.1:26381");

六、Redisson配置参数

根据Redisson的官方文档,可以根据自己的需要来调整Redisson的各种参数,以达到最优的性能表现。以下是一些常用的配置参数及其说明。

  • connectTimeout:连接超时时间,单位:毫秒
  • timeout:读写超时时间,单位:毫秒
  • retryAttempts:连接失败重试次数,-1表示不限制重试次数
  • retryInterval:重试时间间隔,单位:毫秒
  • threads:响应请求线程数,最大为16

可以通过以下方式对Redisson的参数进行配置:

Config config = new Config();
config.useSingleServer()
        .setAddress("redis://127.0.0.1:6379")
        .setRetryAttempts(3)
        .setRetryInterval(1500)
        .setTimeout(3000)
        .setThreads(8);

七、Redisson配置序列化

为了提高Redisson的性能表现,Redisson在数据存储时使用了高效的序列化机制。在Redisson中,默认使用的是JDK序列化机制,但是考虑到JDK的序列化机制在序列化性能、序列化结果可读性、可靠性等方面存在一些问题,因此Redisson提供了多种序列化方式供用户选择。

常用的序列化方式有三种:JDK序列化、FastJSON序列化和Kryo序列化。其中,Kryo序列化是性能最高的一种序列化方式,但是需要注意的是,Kryo序列化与JDK序列化不兼容,因此在使用Kryo序列化时需要注意操作系统的类型及JDK的版本。

如果要对Redisson的序列化机制进行定制,可以通过以下方式来实现。

// 基于Jackson序列化
SerializationConfig serialConfig = config.getCodec().getSerializationConfig();
serialConfig.setJacksonObjectMapper(new ObjectMapper());

// 基于FastJSON序列化
SerializationConfig serialConfig = config.getCodec().getSerializationConfig();
serialConfig.setSerializer("com.alibaba.fastjson.JSON").setDecoder("com.alibaba.fastjson.JSON");

// 基于Kryo序列化
SerializationConfig serialConfig = config.getCodec().getSerializationConfig();
Kryo kryo = new Kryo();
kryo.register(User.class);
kryo.register(Order.class);
kryo.register(Item.class);
kryo.register(ArrayList.class);
kryo.register(LinkedList.class);
kryo.register(RedisCommand.class);
UnicornKryoPool pool = new UnicornKryoPoolImpl(kryo);
serialConfig.setKryoPool(pool);

八、Redisson配置了集群不生效

如果在配置完Redisson集群之后,出现了集群无法使用的情况,可以先检查一下Redisson的版本号是否与Redis的版本是否匹配。Redisson的版本号最好与Redis的版本号一致,否则可能会出现一些兼容性问题。

如果Redisson的版本号与Redis的版本号一致,那么可以通过以下方式来检查Redisson的配置是否正确:

RedissonClient redisson = Redisson.create(Config.fromYAML(new ClassPathResource("redisson-cluster.yml").getInputStream()));
// 打印Redisson的日志
((RLogger)redisson.getConfig().getLogger()).setLevel(Level.DEBUG);
log.debug("Redisson配置信息:" + redisson.getConfig().toJSON());

九、Redisson配置yml

在使用Redisson时,可以根据自己的需求对Redisson的参数进行配置。可以将Redisson的配置信息存储在一个名为redisson.yml的文件中,然后通过Config.fromYAML()方法来加载配置信息。以下是一个Redisson的yml配置文件示例:

singleServerConfig:
  address: "redis://127.0.0.1:6379"
  connectionMinimumIdleSize: 10
  connectionPoolSize: 64
  retryAttempts: 3
  retryInterval: 1500
  connectTimeout: 10000
  timeout: 3000

threads: 64