Redisson 框架学习

Redisson 官方中文文档:
https://yq.aliyun.com/articles/551423?spm=5176.10695662.1996646101.searchclickresult.49f9495diMmXr5

Redisson WiKi:
https://github.com/redisson/redisson/wiki

添加 maven 依赖:

<dependency>
	<groupId>org.redissongroupId>
	<artifactId>redissonartifactId>
	<version>3.10.6version>
dependency>

<dependency>
	<groupId>com.fasterxml.jackson.dataformatgroupId>
	<artifactId>jackson-dataformat-avroartifactId>
	<version>2.9.8version>
dependency>

Redisson 初始化:

package com.yq.redisson;

import javax.annotation.PostConstruct;

import org.apache.log4j.Logger;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.stereotype.Component;

@Component
public class RedissonManager {

    private static Logger logger = Logger.getLogger(RedissonManager.class);

    private static Config config = new Config();

    private static RedissonClient redisson = null;

    // 在执行构造函数后执行
    @PostConstruct
    public static void init() {
        try {
            config.useClusterServers()
                    .setScanInterval(200000)
                    // 设置集群状态扫描间隔
                    .setMasterConnectionPoolSize(10000)
                    // 设置对于master节点的连接池中连接数最大为10000
                    .setSlaveConnectionPoolSize(10000)
                    // 设置对于slave节点的连接池中连接数最大为500
                    .setIdleConnectionTimeout(10000)
                    // 如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。
                    .setConnectTimeout(30000)
                    // 同任何节点建立连接时的等待超时。时间单位是毫秒。
                    .setTimeout(3000)
                    // 等待节点回复命令的时间。该时间从命令发送成功时开始计时。
                    .setRetryInterval(3000)
                    // 当与某个节点的连接断开时,等待与其重新建立连接的时间间隔。时间单位是毫秒。
                    .addNodeAddress("redis://192.168.56.60:7000", "redis://192.168.56.60:7001",
                            "redis://192.168.56.61:7000", "redis://192.168.56.61:7001",
                            "redis://192.168.56.62:7000", "redis://192.168.56.62:7001");
            redisson = Redisson.create(config);
            logger.info("redisson init success!");
        } catch (Exception e) {
            logger.error("redisson init error!", e);
        }
    }

    public RedissonClient getRedisson() {
        return redisson;
    }

}

Redisson 分布式锁

类定义:

org.redisson.Redisson

基于 Redis 的 Redisson 分布式可重入锁 RLock,RLock 接口实现了 Java 并发包中的java.util.concurrent.locks.Lock 接口。

// 根据配置创建 Redisson 类型的 Redis 客户端
RedissonClient redisson = Redisson.create(config);
// 获取锁对象实例
RLock lock = redisson.getLock("anyLock");
// 获取分布式锁
lock.lock();

如果存储这个分布式锁的 Redisson 节点宕机后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson 内部提供了一个监控锁的看门狗,它的作用是在 Redisson 实例被关闭前,不断的。

你可能感兴趣的:(Redis)