Redisson简介和连接配置

Redisson是Java项目中比较常用的一个库,Redisson作者对这个库的定义是“基于Redis的分布式驻内存数据网格”。它不仅仅是一个Redis客户端,还基于Redis实现了许多十分有用的分布式服务,包括:分布式对象、分布式锁等,许多分布式服务的实现都简单可靠,省去了我们重新造轮子的麻烦。

本系列笔记我们介绍Redisson库中的常用方法。

引入依赖

普通Java工程中,我们直接引入Redisson依赖即可。

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.17.7</version>
</dependency>

这里注意,Redisson库也依赖SLF4J提供的API进行日志输出,因此我们还需要引入日志相关的依赖库。

连接Redis服务器

下面例子代码中,我们通过Redission连接和Redis服务器,并写入了一条数据。

package com.gacfox.demo;

import org.redisson.Redisson;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.redisson.config.TransportMode;

public class Main {
    public static void main(String[] args) {
        // Redis配置
        Config config = new Config();
        config.setTransportMode(TransportMode.NIO);
        config.setCodec(new JsonJacksonCodec());

        SingleServerConfig singleServerConfig = config.useSingleServer();
        singleServerConfig.setAddress("redis://127.0.0.1:6379");
        singleServerConfig.setTimeout(3000);
        singleServerConfig.setPassword("abc123");

        // 获取Redis客户端
        RedissonClient client = Redisson.create(config);

        // 操作数据
        RBucket<String> bucket = client.getBucket("captcha");
        bucket.set("123456");

        // 关闭连接
        client.shutdown();
    }
}

代码中,ConfigSingleServerConfig都是Redisson提供的配置对象,我们根据文档写入相关配置,最后调用Redisson.create(config)方法获取客户端即可。

连接Redis集群

实际生产环境中,我们一般都是以集群方式使用Redis。下面代码中,我们使用Redisson的集群模式。

package com.gacfox.demo;

import org.redisson.Redisson;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.config.ClusterServersConfig;
import org.redisson.config.Config;
import org.redisson.config.TransportMode;

public class Main {
    public static void main(String[] args) {
        // Redis配置
        Config config = new Config();
        config.setTransportMode(TransportMode.NIO);
        config.setCodec(new JsonJacksonCodec());

        ClusterServersConfig clusterServersConfig = config.useClusterServers();
        String[] addresses = new String[6];
        addresses[0] = "redis://127.0.0.1:7001";
        addresses[1] = "redis://127.0.0.1:7002";
        addresses[2] = "redis://127.0.0.1:7003";
        addresses[3] = "redis://127.0.0.1:7004";
        addresses[4] = "redis://127.0.0.1:7005";
        addresses[5] = "redis://127.0.0.1:7006";
        clusterServersConfig.addNodeAddress(addresses);
        clusterServersConfig.setTimeout(3000);
        clusterServersConfig.setPassword("abc123");

        // 获取Redis客户端
        RedissonClient client = Redisson.create(config);

        // 操作数据
        RBucket<String> bucket = client.getBucket("captcha");
        bucket.set("123456");

        // 关闭连接
        client.shutdown();
    }
}

集群配置和单节点配置类似,只需要使用useClusterServers()方法创建集群配置对象即可。

RedissonClient配置

上面代码中,我们连接Redis时传入了许多配置信息,这里我们介绍常用的配置。

序列化方式

我们知道Java对象存储到Redis需要一个序列化机制,Redisson支持多种序列化方式,比较常用的2种是:

  • org.redisson.codec.JsonJacksonCodec:基于Jackson的JSON序列化
  • org.redisson.codec.SerializationCodec:基于JDK的序列化

JsonJacksonCodec实现其实还是非常健壮的,会将Java类型信息一并进行序列化,例如:

{
  "@class": "com.gacfox.demo.Student",
  "StudentNo": "HIT123456789",
  "age": 18,
  "name": "Tom",
  "signDate": [
    "java.util.Date",
    1666601933917
  ]
}

我们一般不需要干预这个序列化过程。

除此之外Redisson还提供了许多基于其它流行的高性能序列化库的序列化机制,相比JSON和JDK可能在性能上具有优势,如AvroFST等。不过这里我们还是推荐如果无特殊需求,尽量使用可读性较强的JSON,这样如果数据出现问题,我们可以手动进行修复。

transportMode:传输模式,默认为TransportMode.NIO,Linux下还支持TransportMode.EPOLL

idleConnectionTimeout:默认值10000,如果当前连接数超出了最小空闲连接数,且超过指定空闲时间就会被关闭。

connectTimeout:默认值10000,建立连接的超时时间。

timeout:默认值3000,等待Redis回复的时间。

retryAttempts:默认值3,如果数据发送失败时的重试次数。

retryInterval:默认值1500,发生重试时的时间间隔。

keepAlive:是否发送TCP心跳包,默认为false

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap