百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

「微服务架构」分布式锁Redission官方文档

mhr18 2024-11-19 06:46 21 浏览 0 评论

一、目录

  • 概述
  • 配置方式
  • 3. 程序接口调用方式
  • 数据序列化
  • 单个集合数据分片(Sharding)
  • 6. 分布式对象
  • 7. 分布式集合
  • 8. 分布式锁(Lock)和同步器(Synchronizer)
  • 9. 分布式服务
  • 10. 额外功能
  • 11. Redis命令和Redisson对象匹配列表
  • 12. 独立节点模式
  • 13. 工具
  • 14. 第三方框架整合
  • 15. 项目依赖列表

一、概述

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。

它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。

Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。

以下是Redisson的结构:

  • Redisson作为独立节点 可以用于独立执行其他节点发布到分布式执行服务分布式调度任务服务 里的远程任务。

二、配置方法

2.1.程序化配置

Redisson程序化的配置方法是通过构建Config对象实例来实现的。例如:

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

2.2.文件方式配置

2.2.1通过YAML格式配置

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

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


2.3.常用设置

以下是关于org.redisson.Config类的配置参数,它适用于所有Redis组态模式(单机,集群和哨兵)

codec(编码)

默认值: org.redisson.codec.JsonJacksonCodec

Redisson的对象编码类是用于将对象进行序列化和反序列化,以实现对该对象在Redis里的读取和存储。

threads(线程池数量)

默认值: 当前处理核数量 * 2

这个线程池数量被所有RTopic对象监听器,RRemoteService调用者和RExecutorService任务共同共享。

nettyThreads (Netty线程池数量)

默认值: 当前处理核数量 * 2

这个线程池数量是在一个Redisson实例内,被其创建的所有分布式数据类型和服务,以及底层客户端所一同共享的线程池里保存的线程数量。

executor(线程池)

单独提供一个用来执行所有RTopic对象监听器,RRemoteService调用者和RExecutorService任务的线程池(ExecutorService)实例。

eventLoopGroup

用于特别指定一个EventLoopGroup. EventLoopGroup是用来处理所有通过Netty与Redis服务之间的连接发送和接受的消息。每一个Redisson都会在默认情况下自己创建管理一个EventLoopGroup实例。因此,如果在同一个JVM里面可能存在多个Redisson实例的情况下,采取这个配置实现多个Redisson实例共享一个EventLoopGroup的目的。

只有io.netty.channel.epoll.EpollEventLoopGroup或io.netty.channel.nio.NioEventLoopGroup才是允许的类型。

transportMode(传输模式)

默认值:TransportMode.NIO

可选参数:

  • TransportMode.NIO
  • TransportMode.EPOLL - 需要依赖里有netty-transport-native-epoll包(Linux)
  • Tran- sportMode.KQUEUE - 需要依赖里有 netty-transport-native-kqueue包(macOS)

lockWatchdogTimeout(监控锁的看门狗超时,单位:毫秒)

默认值:30000

监控锁的看门狗超时时间单位为毫秒。该参数只适用于分布式锁的加锁请求中未明确使用leaseTimeout参数的情况。如果该看门口未使用lockWatchdogTimeout去重新调整一个分布式锁的lockWatchdogTimeout超时,那么这个锁将变为失效状态。这个参数可以用来避免由Redisson客户端节点宕机或其他原因造成死锁的情况。

keepPubSubOrder(保持订阅发布顺序)

默认值:true

通过该参数来修改是否按订阅发布消息的接收顺序出来消息,如果选否将对消息实行并行处理,该参数只适用于订阅发布消息的情况。

performanceMode(高性能模式)

默认值:HIGHER_THROUGHPUT

用来指定高性能引擎的行为。由于该变量值的选用与使用场景息息相关(NORMAL除外)我们建议对每个参数值都进行尝试。

该参数仅限于Redisson PRO版本。

可选模式:

  • HIGHER_THROUGHPUT - 将高性能引擎切换到 高通量 模式。
  • LOWER_LATENCY_AUTO - 将高性能引擎切换到 低延时 模式并自动探测最佳设定。
  • LOWER_LATENCY_MODE_1 - 将高性能引擎切换到 低延时 模式并调整到预设模式1。
  • LOWER_LATENCY_MODE_2 - 将高性能引擎切换到 低延时 模式并调整到预设模式2。
  • NORMAL - 将高性能引擎切换到 普通 模式

2.4.集群模式

2.4.1.集群设置

2.4.2.通过YAML文件配置集群模式

---
clusterServersConfig:
	# (连接空闲超时,单位:毫秒)
  idleConnectionTimeout: 10000
  # (连接超时,单位:毫秒)
  connectTimeout: 10000
  # (命令等待超时,单位:毫秒)
  timeout: 3000
  retryAttempts: 3
  retryInterval: 1500
  password: null
  subscriptionsPerConnection: 5
  clientName: null
  loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
  slaveSubscriptionConnectionMinimumIdleSize: 1
  slaveSubscriptionConnectionPoolSize: 50
  slaveConnectionMinimumIdleSize: 32
  slaveConnectionPoolSize: 64
  masterConnectionMinimumIdleSize: 32
  masterConnectionPoolSize: 64
  readMode: "SLAVE"
  nodeAddresses:
  - "redis://127.0.0.1:7004"
  - "redis://127.0.0.1:7001"
  - "redis://127.0.0.1:7000"
  scanInterval: 1000
threads: 0
nettyThreads: 0
codec: !<org.redisson.codec.JsonJacksonCodec> {}
"transportMode":"NIO"

2.5.云托管模式

2.5.1.云托管模式设置

2.5.2.通过YAML文件配置集群模式

2.6.单Redis节点模式

2.6.1.单节点设置

2.6.2.通过YAML文件配置集群模式

2.7.哨兵模式

2.7.1.哨兵模式设置

2.7.2.通过YAML文件配置集群模式

2.8.主从模式

2.8.1.主从模式设置

2.8.2.通过YAML文件配置集群模式

3. 程序接口调用方式

RedissonClient、RedissonReactiveClient和RedissonRxClient实例本身和Redisson提供的所有分布式对象都是线程安全的。

Redisson为每个操作都提供了自动重试策略,当某个命令执行失败时,Redisson会自动进行重试。自动重试策略可以通过修改retryAttempts(默认值:3)参数和retryInterval(默认值:1000毫秒)参数来进行优化调整。当等待时间达到retryInterval指定的时间间隔以后,将自动重试下一次。全部重试失败以后将抛出错误。

Redisson框架提供的几乎所有对象都包含了同步和异步相互匹配的方法。这些对象都可以通过RedissonClient接口获取。同时还为大部分Redisson对象提供了满足异步流处理标准的程序接口RedissonReactiveClient。除此外还提供了RxJava2规范的RedissonRxClient程序接口。

以下是关于使用RAtomicLong对象的范例:

RedissonClient client = Redisson.create(config);
RAtomicLong longObject = client.getAtomicLong('myLong');
// 同步执行方式
longObject.compareAndSet(3, 401);
// 异步执行方式
RFuture<Boolean> result = longObject.compareAndSetAsync(3, 401);

RedissonReactiveClient client = Redisson.createReactive(config);
RAtomicLongReactive longObject = client.getAtomicLong('myLong');
// 异步流执行方式
Mono<Boolean> result = longObject.compareAndSet(3, 401);
RedissonRxClient client = Redisson.createRx(config);
RAtomicLongRx longObject= client.getAtomicLong("myLong");
// RxJava2方式
Flowable<Boolean result = longObject.compareAndSet(3, 401);

3.1. 异步执行方式

3.2. 异步流执行方式

4. 数据序列化

Redisson的对象编码类是用于将对象进行序列化和反序列化,以实现对该对象在Redis里的读取和存储。

5. 单个集合数据分片(Sharding)

在集群模式下,Redisson为单个Redis集合类型提供了自动分片的功能。

Redisson提供的所有数据结构都支持在集群环境下使用,但每个数据结构只被保存在一个固定的槽内。Redisson PRO提供的自动分片功能能够将单个数据结构拆分,然后均匀的分布在整个集群里,而不是被挤在单一一个槽里。自动分片功能的优势主要有以下几点:

  1. 单个数据结构可以充分利用整个集群内存资源,而不是被某一个节点的内存限制。
  2. 将单个数据结构分片以后分布在集群中不同的节点里,不仅可以大幅提高读写性能,还能够保证读写性能随着集群的扩张而自动提升。

Redisson通过自身的分片算法,将一个大集合拆分为若干个片段(默认231个,分片数量范围是3 - 16834),然后将拆分后的片段均匀的分布到集群里各个节点里,保证每个节点分配到的片段数量大体相同。比如在默认情况下231个片段分到含有4个主节点的集群里,每个主节点将会分配到大约57个片段,同样的道理如果有5个主节点,每个节点会分配到大约46个片段。

目前支持的数据结构类型和服务包括集(Set)映射(Map)BitSet布隆过滤器(Bloom Filter)Spring CacheHibernate Cache

该功能仅限于Redisson PRO版本。

6. 分布式对象

6.1.通用对象桶 (Object Bucket)

6.2. 二进制流(Binary Stream)

6.3.地理空间对象桶(Geospatial Bucket)

6.4. BitSet

6.4.1. 数据分片(Sharding)

6.5.原子整长型 (AtomicL ong)

6.6.原子双精度浮点(AtomicDouble)

6.7.话题(订阅分发)

6.7.1.模糊话题

6.8.布隆过滤器(Bloom Filter)

6.8.1. 数据分片 (Sharding)

6.9. 基数估计算法(HyperLogLog)

6.10. KZ (LongAdder)

6.11. 双精度浮点累加器(DoubleAdder)

6.12. 限流器 (RateLimiter)

7.分布式集合

7.1. 映射(Map)

7.1.1.映射(Map) 的元素淘汰(Eviction) ,本地缓存(L ocalCache)和数据分片(Sharding)

7.1.2.映射持久化方式(缓存策略)

7.1.3. 映射监听器(Map Listener)

7.1.4. LRU有界映射

7.2. 多值映射(Multimap)

7.2.1.基于集(Set) 的多值映射(Multimap)

7.2.2. 基于列表(List) 的多值映射(Multimap)

7.2.3. 多值映射(Multimap) 淘汰机制(Eviction)

7.3.集(Set)

7.3.1.集(Set) 淘汰机制(Eviction)

7.3.2. 集(Set) 数据分片(Sharding)

7.4.有序集(SortedSet)

7.5.计分排序集(ScoredSortedSet)

7.6.字典排序集(LexSortedSet)

7.7. 列表(List)

7.8.队列(Queue)

7.9.双端队列(Deque)

7.10.阻塞队列(Blocking Queue)

7.11. 有界阻塞队列(Bounded Blocking Queue)

8.分布式锁(Lock) 和同步器(Synchronizer)

8.1.可重入锁(Reentrant Lock)

8.2.公平锁(Fair Lock)

8.3.联锁(Multil ock)

8.4.红锁(RedL ock)

8.5.读写锁(ReadWritel ock)

8.6.信号量(Semaphore)

8.7.可过期性信号量(PermitExpirableSemaphore)

8.8.闭锁(CountDownl _atch)

9.分布式服务

9.1.分布式远程服务(Remote Service)

■9.1.1. 分布式远程服务工作流程

■9.1.2.发送即不管(Fire-and-Forget) 模式和应答回执(Ack- -Response) 模式

■9.1.3.异步调用

■9.1.4. 取消异步调用

9.2.分布式实时对象(Live Object) 服务

■9.2.1. 介绍

■9.2.2.使用方法

■9.2.3.高级使用方法

■9.2.4.注解(Annotation) 使用方法

■9.2.5. 使用限制

9.3. 分布式执行服务(Executor Service)

■9.3.1. 分布式执行服务概述

■9.3.2. 任务

■9.3.3. 取消任务

9.4.分布式调度任务服务(Scheduler Service)

■9.4.1.分布式调度任务服务概述

■9.4.2. 设定任务计划

■9.4.3.通过CRON表达式设定任务计划

= 9.4.4.取消计划任务

9.5.分布式映射归纳服务(MapReduce)

■9.5.1.介绍

■9.5.2.映射(Map) 类型的使用范例

■9.5.3.集合(Collection) 类型的使用范例

10.额外功能

10.1.对Redis节点的操作

10.2. 复杂多维对象结构和对象引用的支持

10.3.命令的批量执行

10.4. 脚本执行

10.5.底层Redis客户端

11. Redis命令和Redisson对 象匹配列表

12.独立节点模式

12.1.概述

12.2.配置方法

12.2.1. 配置参数

12.2.2.通过JSON和YAML配置文件配置独立节点

12.3. 初始化监听器

12.4.嵌入式运行方法

12.5.命令行运行方法

12.6. Docker方式运行方法

13.工具

13.1.集群管理工具

13.1.1.创建集群

13.1.2. 踢出节点

13.1.3.数据槽迁移

13.1.4.添加从节点

13.1.5. 添加主节点

14.第三方框架整合

14.1. Spring框架整合

14.2. Spring Cache整合

14.2.1.本地缓存

14.2.2.数据分片

14.2.3. JSON和YAML配置

14.3. Hibernate整合

14.3.1.本地缓存

14.3.2.数据分片

14.4. Java缓存标准规范JCache API (JSR-107)

14.5. Tomcat会话管理器(Tomcat Session Manager)

14.6. Spring Session会话管理器

14.7. JMX与Dropwizard Metrics

14.8. Spring Data Redis集成

14.9. Spring Boot Starter集成

1. Add redisson-spring-boot-starter dependency into your project:

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

2. Add settings into application.settings file

Using common spring boot settings:

spring:
  redis:
    database: 
    host:
    port:
    password:
    ssl: 
    timeout:
    cluster:
      nodes:
    sentinel:
      master:
      nodes:

Using Redisson settings:

spring:
  redis:
   redisson: 
      file: classpath:redisson.yaml
      config: |
        clusterServersConfig:
          idleConnectionTimeout: 10000
          connectTimeout: 10000
          timeout: 3000
          retryAttempts: 3
          retryInterval: 1500
          failedSlaveReconnectionInterval: 3000
          failedSlaveCheckInterval: 60000
          password: null
          subscriptionsPerConnection: 5
          clientName: null
          loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
          subscriptionConnectionMinimumIdleSize: 1
          subscriptionConnectionPoolSize: 50
          slaveConnectionMinimumIdleSize: 24
          slaveConnectionPoolSize: 64
          masterConnectionMinimumIdleSize: 24
          masterConnectionPoolSize: 64
          readMode: "SLAVE"
          subscriptionMode: "SLAVE"
          nodeAddresses:
          - "redis://127.0.0.1:7004"
          - "redis://127.0.0.1:7001"
          - "redis://127.0.0.1:7000"
          scanInterval: 1000
          pingConnectionInterval: 0
          keepAlive: false
          tcpNoDelay: false
        threads: 16
        nettyThreads: 32
        codec: !<org.redisson.codec.MarshallingCodec> {}
        transportMode: "NIO"

14.10.统计与监控(JMX和其它监控系统)

15.项目依赖列表


参考资料

[redission官方文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95)

相关推荐

【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...

Pure Storage推出统一数据管理云平台及新闪存阵列

PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...

对Java学习的10条建议(对java课程的建议)

不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...

SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!

官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...

JDK21有没有什么稳定、简单又强势的特性?

佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...

「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了

在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...

Java面试题及答案最全总结(2025版)

大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...

数据库日常运维工作内容(数据库日常运维 工作内容)

#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...

分布式之系统底层原理(上)(底层分布式技术)

作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...

oracle 死锁了怎么办?kill 进程 直接上干货

1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

取消回复欢迎 发表评论: