网站首页 > 基础教程 正文
一、目录
- 概述
- 配置方式
- 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提供的自动分片功能能够将单个数据结构拆分,然后均匀的分布在整个集群里,而不是被挤在单一一个槽里。自动分片功能的优势主要有以下几点:
- 单个数据结构可以充分利用整个集群内存资源,而不是被某一个节点的内存限制。
- 将单个数据结构分片以后分布在集群中不同的节点里,不仅可以大幅提高读写性能,还能够保证读写性能随着集群的扩张而自动提升。
Redisson通过自身的分片算法,将一个大集合拆分为若干个片段(默认231个,分片数量范围是3 - 16834),然后将拆分后的片段均匀的分布到集群里各个节点里,保证每个节点分配到的片段数量大体相同。比如在默认情况下231个片段分到含有4个主节点的集群里,每个主节点将会分配到大约57个片段,同样的道理如果有5个主节点,每个节点会分配到大约46个片段。
目前支持的数据结构类型和服务包括集(Set)、映射(Map)、BitSet、布隆过滤器(Bloom Filter)、Spring Cache和Hibernate 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)
猜你喜欢
- 2024-12-18 吊打 ThreadLocal,谈谈FastThreadLocal为啥能这么快?
- 2024-12-18 分布式锁中的王者方案 - Redisson
- 2024-12-18 你管这玩意儿叫高并发? 什么叫高并发
- 2024-12-18 系统数据实时同步方案一落地 系统间数据同步解决方案
- 2024-12-18 分布式锁工具:Redisson 分布式锁 redis zookeeper
- 2024-12-18 Spring Cloud Circuit Breaker快速入门Demo
- 2024-12-18 BitMap是啥?脑袋一下空白? bitmap文件头
- 2024-12-18 一亿个8位数字,用什么排序方法 一亿个8位数字,用什么排序方法最好
- 2024-12-18 Java基础-数据类型和数据结构,初阶小白看过来~
- 2024-12-18 10张图带你搞定高并发之网络IO模型
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)