Redisson

​ Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。充分的利用了Redis键值数据库提供的一系列优势,基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。

​ Redisson始于2013年12月22日,至今已有三年多的发展,日趋成熟。

适用场景

分布式应用,分布式缓存,分布式回话管理,分布式服务(任务,延迟任务,执行器),分布式redis客户端

  • 支持同步/异步/异步流/管道流方式连接
  • 多样化数据序列化
  • 集合数据分片
  • 分布式对象
  • 分布式集合
  • 分布式锁和同步器
  • 分布式服务
  • 独立节点模式
  • 三方框架整合

引入依赖


            org.redisson
            redisson
            3.3.2

Config config = new Config();
config.setTransportMode(TransportMode.EPOLL);
config.useClusterServers()
      //可以用"rediss://"来启用SSL连接
      .addNodeAddress("redis://127.0.0.1:7181");

可以通过用户提供的YAML格式的文本文件来配置

通过YAML格式配置

Redisson的配置文件可以是或YAML格式。 也通过调用 config.fromYAML方法并指定一个 File实例来实现读取YAML格式的配置:

Config config = Config.fromYAML(new File("config-file.yaml"));
RedissonClient redisson = Redisson.create(config);

调用 config.toYAML方法可以将一个 Config配置实例序列化为一个含有YAML数据类型的字符串:

Config config = new Config();
// ... 省略许多其他的设置
String jsonFormat = config.toYAML();

            org.redisson
            redisson-spring-boot-starter
            3.16.4

可重入锁

RLock lock = redisson.getLock("anyLock");
// 最常见的使用方法
lock.lock();

大家都知道,如果负责储存这个分布式锁的Redisson节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。

另外Redisson还通过加锁的方法提供了 leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。

// 加锁以后10秒钟自动解锁
// 无需调用unlock方法手动解锁
lock.lock(10, TimeUnit.SECONDS);

// 尝试加锁,最多等待100秒,上锁以后10秒自动解锁
boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
if (res) {
   try {
     ...

   } finally {
       lock.unlock();
   }
}

Redisson同时还为分布式锁提供了异步执行的相关方法:

RLock lock = redisson.getLock("anyLock");
lock.lockAsync();
lock.lockAsync(10, TimeUnit.SECONDS);
Future<boolean> res = lock.tryLockAsync(100, 10, TimeUnit.SECONDS);
</boolean>

RLock对象完全符合Java的Lock规范。也就是说只有拥有锁的进程才能解锁,其他进程解锁则会抛出 IllegalMonitorStateException错误。但是如果遇到需要其他进程也能解锁的情况,请使用分布式信号量 Semaphore 对象.

更多详细讲解请查阅官方文档

Original: https://www.cnblogs.com/lm66/p/15899507.html
Author: Liming_Code
Title: Redisson

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575985/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Queue

    队列( Queue)是一种经常使用的集合。 Queue实际上是实现了一个先进先出(FIFO:First In First Out)的有序表 Queue接口常用的实现类是 Linke…

    数据库 2023年6月9日
    089
  • linux-centos常用命令

    01-centos-常用命令 1.centos防火墙 关闭 systemctl stop firewalld 禁止开机启动防火墙 systemctl disable firewal…

    数据库 2023年6月11日
    097
  • Mysql索引总结

    一、索引分类 Hash索引:Hash 索引查询效率很高,时间复杂度O(1)。Mysql Innodb引擎不支持hash索引的。Hash索引适合精确查找,不适合范围查找。 平衡二叉树…

    数据库 2023年5月24日
    065
  • StoneDB 亮相中国信通院OSCAR开源产业大会,石原子科技正式加入科技制造开源社区!

    2022 年 9 月 16 日,由中国信息通信研究院(以下简称”信通院”)主办的”2022 OSCAR 开源产业大会”活动于北京成功…

    数据库 2023年6月11日
    093
  • Vue3新特性API

    一、vue3介绍 vue3.0是在2.0的基础上重大优化调整后的升级版本,其响应式原理已经在vue2框架基础中介绍过,此文章重点介绍Vue 3 中一些新功能API及其使用,文章内容…

    数据库 2023年6月14日
    089
  • MySQL实战45讲 20

    20 | 幻读是什么,幻读有什么问题? 建表和初始化语句如下 CREATE TABLE t ( id int(11) NOT NULL, c int(11) DEFAULT NUL…

    数据库 2023年5月24日
    092
  • 第18章 MySQL8其它新特性

    第18章 MySQL8其它新特性 1. MySQL8新特性概述 MySQL&#x4ECE;5.7&#x7248;&#x672C;&#x76F4;&a…

    数据库 2023年6月6日
    083
  • 2022-08-19 PreparedStatement

    PreparedStatement接口是 Statement的子接口,它表示一条预编译过的SQL语句 什么是SQL注入 SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,…

    数据库 2023年5月24日
    096
  • [spring]spring详细总结

    spring 1.spring简介 Spring框架是一个开源的应用程序框架,是针对bean的生命周期进行管理的轻量级容器。 Spring解决了开发者在J2EE开发中遇到的许多常见…

    数据库 2023年6月16日
    062
  • mybatis-plus详解

    旧的代码生成 记得导包,依赖如下 com.baomidou mybatis-plus-boot-starter 3.5.1 com.baomidou mybatis-plus-ge…

    数据库 2023年6月14日
    092
  • ReentrantLock 公平锁源码 第1篇

    ReentrantLock 1 这篇还是接着ReentrantLock的公平锁,没看过第0篇的可以先去看上一篇https://www.cnblogs.com/sunankang/p…

    数据库 2023年6月16日
    0111
  • HMX-Server-分步式服务器框架(开源+源码)

    (原文地址:http://www.cnblogs.com/hellohuang/p/5492302.html ) 这是一个简单实现有分步式框架,由5个服务进程组成一个服务器,它们分…

    数据库 2023年6月14日
    0113
  • try enabling the break write locks option for the cleanup

    如图: 一般是在中断:提交/更新的时候产生的。 一般两种解决方式(可以参考其他的): 1,重启ide(我的就是这么神奇,重启idea后好了); 2,在cleanup时勾选 brea…

    数据库 2023年6月11日
    0124
  • 老板:把系统从单体架构升级到集群架构!

    首发于公众号:BiggerBoy 如题,本文针对工作中实际经验,整理了把一个单体架构的系统升级成集群架构需要做的准备工作,以及为集群架构的升级做指导方针。 本文首先分析了单体架构存…

    数据库 2023年6月11日
    073
  • dubbo 使用Multicast注册中心找不到Provider (No provider available for the service)

    使用Multicast注册中心配置,缺省配置为通过Multicast注册中心广播互相发现。所以在同一台机器时需设置unicast=false:即:multicast://224.5…

    数据库 2023年6月16日
    087
  • Oracle 有排序的分页SQL写法

    第一种: 第二种: 第一种比第二种效率会高,这是因为:CBO 优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询…

    数据库 2023年6月16日
    087
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球