以AtomicDoubleExamples为入口,初步分析redisson启动及命令、服务
- Redisson 启动的主类为org.redisson.Redisson, 启动主要是初始化connection pool,还有两个比较少用的evictionScheduler(local cache housekeeping?)及local cache用的WriteBehindService ?
- Redisson从config、connectionManager、connectionPool、Entry对象都按redis 类型来区分,如single ,masterslave、sentinel、cluster等,但核心都是masterSlave
- connection pool里面分Redission的Executor 及netty client两部分,默认都是Runtime.getRuntime().availableProcessors() * 2;
- pool的创建,以masterSlave(含single),都是在都 在protected MasterSlaveConnectionManager(Config cfg, UUID id)内创建
- 线程数量配置对应在 下面json的threads及nettyThread {
“singleServerConfig”:{
“idleConnectionTimeout”:10000,
“pingTimeout”:1000,
“connectTimeout”:10000,
“timeout”:3000,
“retryAttempts”:3,
“retryInterval”:1500,
“reconnectionTimeout”:3000,
“failedAttempts”:3,
“password”:null,
“subscriptionsPerConnection”:5,
“clientName”:null,
“address”: “redis://192.168.157.130:6379”,
“subscriptionConnectionMinimumIdleSize”:1,
“subscriptionConnectionPoolSize”:2,
“connectionMinimumIdleSize”:1,
“connectionPoolSize”:2
,
“database”:0
},
“threads”:1,
“nettyThreads”:2,
“codec”:{
“class”:“org.redisson.codec.JsonJacksonCodec”
},
“transportMode”:“NIO”
}
与Redis进行交互设计为多个Command, command 简单总结如下:
- 实际都是异步执行,同步通过封装feature、promise实现
- 关键package org.redisson.executor及package org.redisson.command;
- 最终执行commandExecutor.writeAsync(
- 命令清单:RedisCommands
- 命令类:RedisCommand 有一个关键实现convert,AtomicDouble在redis内实际是文本模式保存,通过convert进行转换