CloudNativeEra
  • Introduction
  • 名词解释
  • Computer Science
    • Computer Organization
      • CPU
      • 二进制、电路、加法器、乘法器
      • 编译、链接、装载
      • 存储器
      • IO
    • Operating System
      • 操作系统基础知识
      • 系统初始化
      • 进程管理
      • Everything about Memory
      • 文件系统
      • 并行编程
      • Linux
        • CPU
        • IO 多路复用
        • DMA IO and Linux Zero Copy
    • Computer Network
      • 网络相关命令
      • 评估系统的网络性能
      • 网络抓包
      • Linux 最多支撑的 TCP 连接
      • 网络虚拟化
      • DHCP 工作原理
    • Data Structure and Algorithm
      • 题目列表
      • Summarize
        • 方法总结
        • 二分思想
        • 树的演化
        • 算法思想总结
      • Data Structure
        • Data Struct - Array
        • Tree
        • Heap
        • Hash
        • 字符串
      • Algorithm
        • Sorting Algorithm
        • 查找
        • 贪心算法
        • 动态规划
        • 位运算
      • Practice Topics
        • Data Struct in SDK
        • Topic - Tree
        • Topic - Graph
        • Topic - 滑动窗口
        • 剑指 Offer 题解
    • 并发编程
      • 并发模式
      • 并发模型
  • 系统设计
    • 软件设计
      • 软件架构
      • 编程范式
      • 系统设计题
      • 设计原则
      • 计算机程序的构造和解释 SICP
    • 领域驱动设计
      • 应用:在线请假考勤管理
      • 应用: library
    • 微服务与云原生
      • Designing and deploying microservices
      • 容器技术
      • Docker
      • Etcd
      • Kubernetes
        • Kubernetes - Mapping External Services
      • Istio
      • 监控
    • 分布式系统
      • 分布式理论
      • 分布式事务
    • 后端存储设计
      • 缓存设计
      • 数据库架构设计
    • CI/CD
    • 设计最佳实践
    • 测试
    • 安全
    • 综合
      • 开发实践
      • 分布式锁
      • 分布式计数服务
      • 弹幕系统设计
      • 消息队列设计
      • 分布式ID生成算法
      • 限流设计
      • 网关设计
      • 通用的幂等设计
      • 分布式任务调度
        • Timer
        • ScheduledExecutorService
        • Spring Task
        • Quartz
      • 交易系统
      • 权限设计
  • 编程语言
    • 编程语言
    • C & C++
    • Java
      • JVM
        • JVM Bytecode
      • Java 核心技术
      • Java 8 新特性
      • Java 集合框架
      • Java NIO
      • 并发编程
        • 线程生命周期与线程中断
        • 三个线程交替打印
        • 两个线程交替打印奇偶
        • 优雅终止线程
        • 等待通知机制
        • 万能钥匙:管程
        • 限流器
        • 无锁方案 CAS
    • Java 源码阅读
      • Unsafe
      • 异步计算 Future
      • Java Queue
      • CoalescingRingBuffer 分析
      • Java Collections
        • PriorityQueue 分析
        • HashMap 分析
        • TreeMap
    • Golang
    • Python
  • 框架/组件/类库
    • Guava
      • Guava Cache
      • Guava EventBus
    • RxJava
    • Apache MINA
    • Netty
      • 网络 IO 模型
      • Netty 生产问题
    • Apache Tomcat
    • MyBatis
    • 限流框架
    • Spring Framework
      • Spring Core
      • Spring 事务管理
    • Spring Boot
    • Spring Cloud
      • Feign & OpenFeign
      • Ribbon
      • Eurake
      • Spring Cloud Config
    • FixJ
    • Metrics
    • Vert.x
  • 中间件
    • Redis
      • Redis 基础
        • Redis 数据结构设计与实现
        • Redis 高性能网络模型
      • Redis checklist
      • 应用案例 - Redis 数据结构
      • 应用案例 - Redis 缓存应用
      • 应用案例 - Redis 集群
      • Redis 客户端
      • Redis 生产案例
        • [译] 在 Redis 中存储数亿个简单键值对
    • MySQL
      • MySQL 基础
      • MySQL Index
      • MySQL Transaction
      • MySQL 优化
      • MySQL 内核
      • MySQL Command
      • MySQL Checklist
      • MySQL Analysis Tool
      • 实现 MySQL
    • State Machine
    • 数据库连接池
    • MQ
      • 高性能内存队列 Disruptor
      • Kafka
      • Pulsar
      • RocketMQ
        • Broker 的设计与实现
      • NSQ
  • 实际案例
    • 线上 Case
      • Request Aborted
      • MySQL - Specified key was too long
      • Java 应用 CPU 100% 排查优化
      • 频繁 GC 导致的 Java 服务不响应
      • 导出优化
  • 大数据
    • 流计算
    • Flink
  • 其他
    • 工具
    • 读书
      • 设计数据密集型应用
      • 实现领域驱动设计
      • 精通比特币
      • 提问的智慧
    • 论文
    • 工程博客
    • 阅读源码
    • 面试
      • 如何在最短的时间里对对方有个全面的了解
    • 分享
    • 软技能
    • Todo
  • Blog
    • #算法
      • 查找
      • 位运算
      • 树
    • #架构
      • 1- 通信
    • Design & Dev & Opt
      • High Performance Data structure Design
  • Tiny Project
    • A Simple WeChat-like Instant Messaging Platform
由 GitBook 提供支持
在本页

这有帮助吗?

  1. 中间件
  2. Redis

Redis 客户端

Redisson

Redisson 初始化流程

RedissonClient redissonClient = Redisson.create(config);

  1. ConnectionManager: org.redisson.config.ConfigSupport#createConnectionManager 根据 config 配置的 redis server 类型来决定使用哪个 ConnectionManager, 类型如下 a. org.redisson.connection.SingleConnectionManager extends MasterSlaveConnectionManager b. org.redisson.connection.MasterSlaveConnectionManager c. org.redisson.connection.SentinelConnectionManager d. org.redisson.cluster.ClusterConnectionManager e. org.redisson.connection.ReplicatedConnectionManager f. 应该也支持自定义的 ConnectionManager

    接着主要看一下 MasterSlaveConnectionManager 的初始化过程 1.1. 根据配置的 TransportMode 来初始化 EventLoopGroup (NIO, Epoll, KQueue), nettyThreads 默认是 32, EventLoopGroup 也支持 config 传入,也就是在外部初始化好 EventLoopGroup 后,传给 Redisson 使用;根据 TransportMode 来赋值 socketChannelClass;这里决定了 ConnectionManager 要使用什么样的网络模型和线程模型,底层是使用的 Netty 的 EventLoop 模型,需要对 Netty 进行进一步学习

1.2. resolverGroup 的用户暂时不清楚 1.3. 初始化 executorService, 可以外部指定,如果不指定默认会创建一个固定线程大小的线程池,默认配置是 16,如果不想指定,就设置 config.setThreads(0) 1.4. 保存 config, codec 1.5. 初始化 CommandSyncService commandExecutor, 目前还不清楚有什么用 1.6. 初始化定时器,使用 HashedWheelTimer 时间轮 1.7. 初始化一个空闲连接监控器 org.redisson.connection.IdleConnectionWatcher connectionWatcher 1.8. 初始化一个发布订阅服务 org.redisson.pubsub.PublishSubscribeService#PublishSubscribeService 1.9. 初始化 masterSlaveEntry,然后 setupMasterEntry 创建一个 RedisClient 的实例,连接到 Master Redis,被 RFuture 包裹, syncUninterruptibly 有什么用呢?

org.redisson.connection.MasterSlaveConnectionManager#initSingleEntry org.redisson.connection.MasterSlaveEntry#setupMasterEntry(org.redisson.misc.RedisURI) org.redisson.connection.ConnectionManager#createClient org.redisson.connection.MasterSlaveConnectionManager#createClient org.redisson.connection.MasterSlaveConnectionManager#createClient(org.redisson.api.NodeType, org.redisson.misc.RedisURI, int, int, java.lang.String) org.redisson.client.RedisClient#create new RedisClient(config) 创建 netty bootstrap 和 netty pubSubBootstrap: new BootStrap() org.redisson.connection.MasterSlaveEntry#setupMasterEntry(redisClient) redisClient.resolveAddr

1.10. 如果是 Master-Slave 模式,会在初始化 Slave Entry 1.11. 开启 DNSMonitoring,监控 Master Slave 的变化

  1. 初始化一个 Eviction scheduler (驱逐调度器),用于删除在 5s 和 2h 之间的过期项, 它分析已删除的过期键数量,并根据它来 "调整" 下一次的执行延迟。

  2. 初始化 writeBehindService,这是一个后台写入服务,用来处理后台写入相关的任务

上一页应用案例 - Redis 集群下一页Redis 生产案例

最后更新于4年前

这有帮助吗?