- camellia-hbase-client,支持obkv-hbase
- camellia-redis-proxy,cluster-mode-2,kv场景下(开启严格命令重定向),支持更平滑的节点上下线
- camellia-redis-proxy,进程退出时执行自定义offlineCallback
- camellia-hot-key-server,进程退出时执行自定义offlineCallback
- camellia-delay-queue-server,进程退出时执行自定义offlineCallback
- camellia-id-gen-servers,进程退出时执行自定义offlineCallback
- 升级netty版本到
4.1.116
- 升级jctools版本到
4.0.5
- 升级obkv-table版本到
1.3.0
- camellia-redis-proxy,kv,修复了某些场景下,初始化可能失败的问题
- camellia-redis-proxy,最低java版本升级为java21,并且使用spring-boot3作为启动器,相关配套的sdk保持java8不变
- camellia-delay-queue,最低java版本升级为java21,并且使用spring-boot3作为启动器,相关配套的sdk保持java8不变
- camellia-hot-key-server,最低java版本升级为java21,并且使用spring-boot3作为启动器,相关配套的sdk保持java8不变
- camellia-id-gen-server,最低java版本升级为java21,并且使用spring-boot3作为启动器,相关配套的sdk保持java8不变
- camellia-redis-client,支持透明的读取redis-cluster的从节点
- camellia-redis-proxy,kv模块,zset使用encode-version1编码时,支持异步写入kv
- camellia-redis-proxy,支持给cport端口增加密码,从而伪redis-sentinel模式和伪redis-cluster模式的节点心跳可以增加鉴权
- camellia-redis-proxy,读写分离时的健康检查,支持自动移除不活跃的后端
- camellia-redis-proxy,kv模块,支持关闭hot-key计算逻辑
- camellia-redis-proxy,kv模块,支持对不同对namespace设置不同的hot-key配置
- camellia-redis-proxy,调整了自定义实现类的配置名,同时支持
xxx.xxx.className
和xxx.xxx.class.name
- camellia-redis-proxy,使用
proxy config broadcast
命令广播配置变更时,支持特定配置文件不做写覆盖 - camellia-redis-proxy,kv模块,优化了自定义配置的读取缓存性能
- camellia-redis-proxy,kv模块,zset使用encode-version1编码时,优化了zadd命令的性能
- camellia-redis-proxy,
proxy
限制为只允许通过cport访问 - camellia-mq-isolation,当topic和namespace不匹配时,不直接抛出异常丢弃任务,而是打印日志但是继续执行任务
- camellia-mq-isolation,优化controller执行select mq info的逻辑,当依赖redis异常时也能匹配更优结果
- camellia-dashboard/camellia-console/camellia-config,移除swagger
- camellia-redis-proxy,kv模块,修改obkv的表结构,不再使用ttl表,以便提升性能(破坏性更新)
- camellia-core,优化ReloadableProxyFactory的reload逻辑
- camellia-redis-proxy,kv模块,当key不存在时,zrem方法的返回格式错误
- camellia-redis-proxy,transanction命令中包裹publish命令时逻辑错误(当前仅当后端是redis-cluster时有异常)
- camellia-redis-client,使用CamelliaRedisProxyResource资源类型时,db参数错误
- camellia-redis-proxy,当后端是
redis-proxies-discovery://username:passwd@proxyName
,错误的初始化逻辑 - camellia-redis-proxy,pubsub在某些场景下回包超时的问题
- camellia-redis-proxy,plugin模块,新增内置的KeyPrefixMultiWriteFunc,用于MultiWriteProxyPlugin,并作为默认值
- camellia-redis-proxy,kv模块,支持使用run-to-completion来优化读命令的性能
- camellia-redis-proxy,plugin模块,MultiWriteProxyPlugin,配置项名称从
multi.write.func.className
修改为multi.write.func.class.name
- camellia-redis-proxy,kv模块,优化了节点上下线时,lru缓存的清理逻辑
- camellia-redis-proxy,kv模块,优化了ZSetIndexLRUCache的slot计算
- camellia-http-accelerate-proxy,移除了本模块
- camellia-redis-proxy, cluster模块,优化并修复了cluster-mode-2的一些边界场景
- camellia-redis-proxy,kv模块,重构了KVClient的接口定义,新增slot参数,底层存储编码更新(破坏性,和1.2.28不兼容),从而可以同时适配range分区和hash分区的kv存储
- camellia-redis-proxy,kv模块,新增支持set相关命令,包括:
sadd
、srem
、smembers
、spop
、srandmember
、sismember
、smismember
、scard
- camellia-redis-proxy,kv模块,新增支持scan命令
- camellia-redis-proxy,kv模块,支持根据不同的namespace配置不同的kv后端
- camellia-redis-proxy,kv模块,支持通过redis选举一个节点执行gc,从而不需要单独启动一个节点执行gc
- camellia-redis-proxy,新增
client kill id xxx
、client kill addr xxx
、client kill laddr xxx
命令的支持 - camellia-redis-client,新增smismember方法的支持(camellia-redis3)
- camellia-redis-client,eval命令和executeWrite命令,支持不同类型的MultiWriteType
- camellia-redis-proxy,kv模块,移除了hash和zset的encode-version为2和3的实现,简化了代码结构
- camellia-redis-proxy,kv模块,obkv直接使用ObTableClient,而非OHTableClient
- camellia-redis-proxy,kv模块,调整了encode-version等部分配置的配置key
- camellia-redis-proxy,kv模块,增强了监控相关的功能
- camellia-redis-proxy,kv模块,优化了zset的lru cache的性能,优化了lru cache重建的逻辑
- camellia-redis-proxy,kv模块,更新了kv-client的scanByStartEnd和countByStartEnd方法的定义,增加了prefix参数
- camellia-redis-proxy,kv模块,优化了HBaseKVClient的scanByPrefix/countByPrefix/countByStartEnd方法,减少无效数据扫描
- camellia-redis-proxy,kv模块,升级了依赖的tikv-client的版本(老版本有bug)
- camellia-redis-proxy,优化了命令不支持时的回包
- camellia-redis-proxy-bootstrap支持使用maven profile来编译不同的功能
- 重构了multi-write相关的代码,涉及camellia-redis-client、camellia-hbase-client、camellia-feign-client
- camellia-redis-proxy,kv模块,zset的score字段返回时使用了科学计数法的问题
- camellia-redis-proxy,kv模块,zset的zrevrangebyscore方法,某些case下死循环
- camellia-redis-proxy,cluster-mode-2,部分场景下重新选主后,新的leader没有把slot-map刷新到storage
- camellia-redis-proxy,支持使用分布式kv存储模拟redis协议,如hbase、tikv、obkv等
- camellia-redis-proxy,提供了一种新的伪redis-cluster模式,在使用分布式kv存储模拟redis协议时建议开启,可以提高扩缩容时的平滑性,此外新模式可以在不事先确定ip的情况下部署伪redis-cluster模式的集群,适合k8s场景
- camellia-redis-proxy,支持自定义ProxySentinelModeNodesProvider,从而可以在不事先确定ip的情况下部署伪redis-sentinel模式的集群,适合k8s场景
- camellia-redis-proxy,新增了time命令的支持
- camellia-redis-proxy,使用nacos和etcd作为配置中心时,支持使用本地配置文件来设置节点级别的特殊配置
- camellia-redis-proxy,支持在读写分离配置下使用keys命令和randomkey命令,只需要write地址是redis-standalone或者redis-sentinel
- camellia-redis-proxy,支持在读写分离配置下使用transaction系列命令,所有请求会发给write地址
- camellia-redis-proxy,支持plugin在reply阶段执行命令重定向
- camellia-core,支持对失败方法设置失败队列方便上层进行自定义处理
- camellia-mq-isolation,优化了相关功能,包括性能和自动隔离机制等
- camellia-config,支持64k的配置项
- camellia-feign,支持自定义的重试策略
- camellia-redis-toolkit,新增CamelliaRedisReadWriteLock工具类
- camellia-tools,CamelliaHashedExecutor支持配置初始化的callback用于工作线程初始化时执行自定义逻辑
- 支持配置prometheus指标的前缀,包括redis-proxy、hot-key、id-gen、delay-queue
- 升级netty的版本到4.1.108.Final
- 升级netty-incubator-transport-native-io_uring的版本到0.0.25.Final
- 升级netty-incubator-codec-native-quic的版本到0.0.62.Final
- camellia-redis-proxy,优化了日志打印,方便排查问题
- camellia-redis-proxy,优化了延迟加载的功能
- camellia-redis-proxy,重构和优化了伪cluster模式和伪sentinel模式的代码结构
- camellia-redis-toolkit,CamelliaRedisLock使用ReentrantLock替换了synchronized
- 优化了健康检查api,包括id-gen、delay-queue、mq-isolation模块
- 优化了使用spring-boot-starter启动时console-server的启动流程,包括redis-proxy和hot-key
- 重构了InetUtils#findFirstNonLoopbackAddress方法,从而能适应更一般的配置场景
- 支持使用统一的配置去标识本机ip,包括伪cluster模式、伪sentinel模式、proxy命令、upstream地址替换等场景
- camellia-cache,修复使用spring-boot3时不生效的问题
- camellia-redis-proxy新增
MOVE
、CF.RESERVE
、BF.CARD
、BF.RESERVE
命令支持 - camellia-redis-proxy新增
GEORADIUSBYMEMBER_RO
、GEORADIUS_RO
命令支持,感谢 @wozaizhe55 - camellia-redis-proxy新增
CLUSTER KEYSLOT
命令支持,感谢 @ttiantian006 - camellia-tools新增
CamelliaCircuitBreakerManager
工具类,感谢 @hkj-07 - 新增mq-isolation模块 (alpha预览)
- camellia-redis-proxy新增 docker-compose/k8s 相关文档,感谢 @48N6E
- camellia-redis-proxy修复shard pubsub相关命令不可用的问题
- camellia-redis-proxy修复内存泄漏
- camellia-redis-proxy新增通过http访问proxy执行command的功能
- camellia-redis-proxy新增ReadOnlyProxyPlugin插件,开启后,会拦截写命令
- camellia-redis-proxy新增
READONLY
命令,直接返回ok
- camellia-id-gen修改了metrics的返回,接口监控粒度不再tag粒度
- 无
- 无
- camellia-redis-proxy
quit
命令,先回一个ok
再关闭连接,而不是直接关闭连接 - camellia-redis-proxy,在开启伪redis-sentinel模式时,cport支持
quit
命令
- camellia-redis-proxy, 开启伪redis-sentinel模式下,
proxy
命令无效的问题
- camellia-redis-proxy支持对后端redis连接初始化的延迟加载
- camellia-redis-proxy优化了sentinel-mode下连接管理的逻辑
- 无
- camellia-redis-proxy增强使用prometheus/grafana进行监控的能力
- camellia-hot-key增强使用prometheus/grafana进行监控的能力
- camellia-delay-queue新增使用prometheus/grafana监控的能力
- camellia-id-gen新增使用prometheus/grafana监控的能力
- camellia-redis-proxy支持伪redis-sentinel模式,可以模拟sentinel主从切换来组成高可用集群
- camellia-redis-proxy支持使用-D启动参数来指定自定义配置文件
- camellia-redis-proxy的info命令,新增redis_mode字段的返回
- camellia-redis-proxy的info命令,camellia_redis_proxy_version字段名修改为camellia_version
- camellia-redis-proxy的hello命令,新增version、redis_version等字段的返回,用于兼容部分redis客户端的行为(如高版本lettuce)
- camellia-delay-queue-sdk,修改了日志打印,避免jdk17下初始化报错的问题
- camellia-redis-proxy的info命令,collection_time字段结果有误
- CamelliaRedisTemplate,使用redis-sentinel/redis-sentinel-slaves时,如果sentinel有password,可能导致主从切换失败的问题
- camellia-redis-spring-boot-starters,支持spring-boot3
- camellia-cache-spring-boot-starters, 支持spring-boot3
- camellia-delay-queue-spring-boot-starters, 支持spring-boot3
- camellia-feign-spring-boot-starters, 支持spring-boot3
- camellia-hbase-spring-boot-starters, 支持spring-boot3
- camellia-id-gen-spring-boot-starters, 支持spring-boot3
- camellia-hot-key-spring-boot-starters, 支持spring-boot3
- camellia-config-spring-boot-starters, 支持spring-boot3
- camellia-redis-proxy-spring-boot-starters, 支持spring-boot3
- 无
- 无
- camellia-redis-proxy新增
PROXY
命令,从而可以通过任意proxy节点管理所有其他节点的动态配置,从而可以不依赖etcd/nacos等中心化的配置中心 - camellia-redis-proxy新增对CuckooFilter系列命令的支持
- camellia-redis-proxy,当使用shard-pubsub命令时,后端可能返回
MOVED XXX
错误信息,proxy应该重写error信息,避免上游的ip被暴露给客户端 - camellia-redis-proxy,当开启客户端连接idle检测,如果是一个类似于blpop的阻塞型命令,支持配置是否关闭连接
- camellia-redis-proxy,对接camellia-dashboard时,从HttpURLConnection改成OkHttpClient作为底层http-client
- camellia-redis-proxy,对接camellia-dashboard时,支持使用v2-api,降低http-body的大小
- camellia-redis-proxy,使用local/complex配置方式时,读取配置文件新增trim逻辑
- camellia-redis-proxy,
info memory
新增netty_direct_memory字段
- camellia-redis-proxy, 修复内存泄漏问题,当且仅当开启proxy_protocol_v2协议获取真实客户端ip时产生
- camellia-redis-proxy, 修复MonitorProxyPlugin的NPE问题,当且仅当出现不支持的命令时产生
- 新增camellia-redis-proxy-nacos-bootstrap,从而方便运维人员不需要进行java开发即可使用nacos管理proxy集群
- 新增camellia-redis-proxy-etcd-bootstrap,从而方便运维人员不需要进行java开发即可使用etcd管理proxy集群
- camelia-feign,新增GlobalCamelliaFeignEnv类,从而在使用哈希策略时,可以提前进行负载均衡计算,从而可以在调用前就知道调用的服务实例分布情况,方便进行请求合并
- camellia-redis-proxy的console新增
/shutdownUpstreamClient?url=redis://@127.0.0.1:6379
接口,用于卸载到某个redis集群的连接 - camellia-redis-proxy支持shard-pubsub,也就是支持
SSUBSCRIBE/SUNSUBSCRIBE/SPUBLISH
命令 - camellia-redis-proxy支持
FUNCTION/TFUNCTION
相关命令 - camellia-redis-proxy支持
SCRIPT KILL
命令 - camellia-redis-proxy支持
EXPIRETIME/PEXPIRETIME/LCS/SINTERCARD/SORT_RO/BITFIELD_RO
命令
- 无
- camellia-redis-proxy,eval_ro和evalsha_ro命令在后端是自定义分片或者redis-cluster时,没有正确路由的问题
- camellia-redis-proxy,使用eval/eval_sha/eval_ro/evasha_ro时,如果key数量为0,且后端是redis-cluster时,返回slot错误的问题
- camellia-redis-proxy支持自定义UpstreamAddrConverter,从而可以篡改后端地址(ip或者udsPath),一个典型应用场景是如果proxy和redis混部在同一组机器上,访问本机节点使用uds或者127.0.0.1加速访问,访问非本机节点则使用局域网ip
- camellia-feign,DynamicCamelliaFeignDynamicOptionGetter支持设置负载均衡策略
- 无
- camellia-config/camellia-console支持自定义ConfigChangeInterceptor,用于控制配置变更的流程(如审批)
- camellia-redis-proxy增强plugin的功能,允许对单个命令选择自定义的路由
- camellia-redis-proxy内置HotKeyRouteRewriteProxyPlugin,允许对热key进行自定义的路由
- camellia-redis-proxy支持unix-domain-socket,client到proxy支持,proxy到redis也支持
- camellia-redis-proxy配置连接上限时,如果达到上限,先返回一个error再关闭连接,且支持设置延迟关闭
- 优化CamelliaStrictIdGen的peekId接口的性能
- camellia-redis-proxy后向连接的sendbuf和rcvbuf的默认配置从10M调整为6M
- camellia-redis-proxy优化MultiWriteProxyPlugin的实现
- 无
- 无
- 无
- camellia-delay-queue,发送消息的ttl字段,含义应该是消息延迟到达后的存活时间,而不是消息发送后的存活时间,感谢 fuhaodev 发现这个问题
- camellia-redis-proxy支持
client info
和client list
命令 - camellia-redis-proxy在使用haproxy等四层代理服务时,支持开启
proxy_protocol
去获取真实的客户端ip和端口
- 重构FileUtil为FileUtils
- camellia-redis-proxy代理到redis-cluster时,如果ASK/MOVED超过次数上限,避免错误信息透传回客户端
- camellia-redis-proxy支持PKCS8的SSL/TLS证书,感谢 HelloWorld1018 提供该功能
- camellia-redis-proxy的client到proxy开启tls时,双向认证不生效的问题,感谢 @InputOutputZ 发现这个bug
- 修复camellia-redis-proxy打成fatjar运行时部分配置文件读取失败的问题
- camellia-redis-proxy支持client到proxy的连接开启tls,感谢 HelloWorld1018 的测试和bugfix
- camellia-redis-proxy支持proxy到redis的连接开启tls,感谢 HelloWorld1018 的测试和bugfix
- camellia-redis-proxy使用
info upstream-info
命令获取后端信息时,redis-sentinel
也支持使用sentinelUserName
和sentinelPassword
- camellia-id-gen新增CamelliaStrictIdGen2,基于redis/ntp时间戳实现严格递增序列
- camellia-redis-proxy支持本地配置文件为json格式
- camellia-redis-proxy的console支持关闭,设置端口为0即可
- camellia-http-accelerate-proxy使用quic作为传输通道时,使用bbr作为默认拥塞控制算法(之前是配置缺省)
- 优化camellia-redis-proxy的预热逻辑,如果预热失败,则启动失败
- camellia-redis-proxy代理到redis-sentinel时增加定时获取master节点的逻辑,作为订阅master变更的兜底补充
- redis-sentinel/redis-proxies支持自适应刷新节点列表
- camellia-redis-proxy的console的随机端口功能无效的问题,1.2.11引入
- camellia-redis-proxy使用sentinelPassword时,打印的日志也需要隐藏密码
- camellia-redis-proxy当redis-cluster出现主从切换时,修复NPE(不影响切换)
- camellia-redis-proxy代理到sentinel时如果出现
+reset-master
时没有切换的问题,感谢 segment11 发现这个问题
- camellia-http-accelerate-proxy支持设置backupServer
- camellia-redis-proxy集成nacos作为配置中心时,新增支持json格式,默认还是之前的properties格式
- camellia-redis-proxy支持集成etcd作为配置中心,支持json/properties格式,默认properties格式
- camellia-hot-key-server支持集成etcd作为配置中心,支持json/properties格式,默认json格式
- camellia-hot-key支持
not_contains
规则类型 - 新增MultiTenantProxyRouteConfUpdater和MultiTenantClientAuthProvider,新提供一种更简便的多租户配置方案
- camellia-htt-accelerate-proxy支持设置quic的congestion.control.algorithm
- camellia-redis-proxy multi-write-mode的配置从yml迁移到ProxyDynamicConf,支持租户级别配置,并且支持动态变更
ProxyDynamicConfLoader
重命名方法updateInitConf
为init
camellia-redis-proxy-nacos
重命名 artifactId 为camellia-redis-proxy-config-nacos
com.netease.nim.camellia.redis.proxy.nacos.NacosProxyDynamicConfLoader
重命名为com.netease.nim.camellia.redis.proxy.config.nacos.NacosProxyDynamicConfLoader
- camellia-redis-proxy代理到redis-cluster时,select 0不应该返回error,1.2.1引入该bug
- camellia-http-accelerate-proxy,proxy和transport-server支持设置绑定的host(默认是0.0.0.0)
- camellia-http-accelerate-proxy,transport-route和upstream-route支持关闭
- camellia-redis3(CamelliaRedisTemplate),支持设置auth账号(redis-standalone、redis-sentinel、redis-sentinel-slaves、redis-cluster)
- camellia-redis(CamelliaRedisTemplate),redis-sentinel、redis-sentinel-slaves支持设置sentinelPassword
- camellia-redis3(CamelliaRedisTemplate),redis-sentinel、redis-sentinel-slaves支持设置sentinelUserName和sentinelPassword
- camellia-redis-proxy的redis-sentinel、redis-sentinel-slaves支持设置sentinelUserName和sentinelPassword
- camellia-redis3(CamelliaRedisTemplate),支持zmscore
- camellia-http-accelerate-proxy支持使用quic作为转发层协议
- camellia-http-accelerate-proxy支持对http-content进行压缩传输
- camellia-codec新增XProps工具类,某些情况下比Props更节省内存
- camellia-hot-key-sdk使用ConcurrentHashMapCollector时如果key满了,打印的日志从error改成info
- 优化了camellia-http-console和camellia-http-accelerate-proxy响应包的connection头的逻辑
- 使用direct-buffer优化camellia-hot-key和camellia-http-accelerate-proxy的打包
- camellia-hot-key的rule支持后缀匹配
- 无
- camellia-tools新增CamelliaSegmentStatistics工具类
- camellia-cache新增一个全局总开关
- 新增camellia-http-console模块,一个简单的http-server
- CamelliaRedisTemplate支持设置自定义RedisInterceptor,从而可以方便的接入CamelliaHotKeyMonitorSdk
- 新增camellia-codec模块
- 新增camellia-http-accelerate-proxy模块
- camellia-redis-proxy的GlobalRedisProxyEnv新增ProxyShutdown入口,用于释放端口和连接
- camellia-redis-proxy使用camellia-http-console代替原来的console实现
- camellia-hot-key-server使用camellia-http-console代替原来的console实现
- camellia-hot-key使用camellia-codec模块
- camellia-hot-key-sdk支持设置collector类型,包括Caffeine(默认)、ConcurrentLinkedHashMap、ConcurrentHashMap
- camellia-hot-key-sdk支持设置为异步采集,默认为同步模式
- camellia-redis-proxy打印失败的command的error日志时,日志里的resource没有隐藏password
- camellia-hot-key-sdk获取的hot-key-config的checkThreshold有误(不影响功能)
- camellia-hot-key-server修复热key探测逻辑有误的问题
- camellia-redis-proxy支持集成camellia-hot-key,感谢@21want28k 提供该功能
- CamelliaHotKeyCacheSdk新增几个api,感谢@21want28k 提供该功能
- camellia-hot-key设置ConcurrentLinkedQueue作为默认内存队列,提高一些性能
- camellia-hot-key移除了HotKeyCounterManager中Caffeine的expire策略,避免引起性能劣化
- camellia-hot-key-server支持设置每个namespace下的Caffeine实例个数,从而在某些场景下突破Caffeine单实例的性能上限
- camellia-hot-key-server修复
unknown seqId
报错的问题 - CamelliaHotKeyCacheSdk修复namespace错误的问题,感谢@21want28k 发现这个bug
- camellia-redis-proxy-discovery-zk的1.2.8/1.2.9与1.2.7以及之前的低版本有不兼容的问题,1.2.10增加了兼容性的逻辑
- camellia-redis-proxy在后端redis失败的情况下,支持把redis地址、command命令和关联keys打印到日志文件中
- camellia-redis-proxy、camellia-delay-queue-server、camellia-id-gen-server新增online/offline的callback
- ZkProxyRegistry/ZkHotKeyServerRegistry注册online/offline的callback
- CamelliaHashedExecutor新增hashIndex方法,用于获取hashKey计算得到的线程index
- CamelliaHotKeyCacheSdkConfig移除namespace字段,CamelliaHotKeyCacheSdk的namespace字段应该来自方法传参
- camellia-hot-key-server优雅上下线时没有判断是否有流量
- CamelliaHotKeyCacheSdk修复keyDelete/keyUpdate方法产生的通知没有发送到其他客户端的问题
- TopNCounter每个大周期计算完成后没有清空buffer的问题
- TopNCounter修复计算maxQps不对的问题
- 新增camellia-hot-key模块,具体见:hot-key
- 新增camellia-zk模块,camellia-redis-proxy-zk和camellia-hot-key-zk均引用camellia-zk,从而复用代码
- camellia-redis-proxy面向client的连接,tcp_keepalive参数默认改成true
- camellia-config的namespace的info字段,mysql存储字段从varchar改成text
- camellia-redis-proxy的
/prometheus
接口的换行符,从%n
改成\n
,从而适配windows环境 - camellia-redis-proxy在客户端连接处于发布订阅状态时,如果后端redis宕机或者因为某些原因关闭了redis到proxy的连接,proxy需要同步关闭到client的连接
- camellia-redis-proxy修复连接处于订阅状态时,频繁发送ping命令或者频繁sub/unsub后,导致订阅无效的问题
- camellia-redis-proxy在由于后端redis不可用导致客户端订阅失败的情况下,强制关闭客户端连接
- 无
- 无
- 修复了CamelliaRedisLockManager在并发场景下,可能导致自动renew任务泄露的问题(逻辑正确,但是引起cpu多余开销),影响camellia-delay-queue-server
- 修复了camellia-redis-proxy中RedisConnection下心跳和idle检测定时任务,在使用了事务命令/发布订阅命令时,某些情况下,在连接已经关闭的情况下可能空跑的问题
- camellia-redis-proxy支持对TRANSACTION命令的双写,具体见:multi-write
- camellia-tools新增CamelliaScheduleExecutor工具类
- RateLimitProxyPlugin支持对租户级别设置默认频控,具体见:rate-limit
- camellia-redis-proxy支持复用CommandPack,优化gc
- camellia-config配置key服务器增加trim逻辑
- camellia-config调整了
/getConfigString
接口的返回 - CamelliaLoadingCache在缓存穿透时增加最大执行时间控制
- camellia-redis-proxy细化了后端redis异常时返回给客户端的错误描述信息
- camellia-redis-proxy在伪redis-cluster模式下,
cluster nodes
命令返回的换行符应该是\n
,而不是\r\n
- CamelliaRedisLockManager底层使用CamelliaScheduleExecutor代替ScheduledExecutorService
- camellia-redis-proxy的RedisConnection底层使用CamelliaScheduleExecutor代替ScheduledExecutorService执行idle检测和心跳检测
- camellia-redis-proxy优化了伪redis-cluster模式下心跳逻辑
- 修复camellia-config相关接口sql错误的问题
- camellia-redis-proxy在连接处于TRANSACTION或者SUBSCRIBE状态时,ping命令应该透给后端而不是直接返回
- camellia-redis-proxy修复了连接在SUBSCRIBE和normal状态间频繁切换后,普通命令没有响应的问题
- camellia-redis-proxy修复了连接在从SUBSCRIBE转变为normal后,又使用阻塞型命令后命令没有响应的问题
- camellia-redis-proxy修复了代理到redis-cluster时,TRANSACTION命令包裹的普通命令的key的slot计算为0时导致事务逻辑错误的问题
- 无
- camellia-redis-proxy内置内存队列支持使用jctools的高性能队列,从而优化性能
- camellia-redis-proxy伪redis-cluster模式下,proxy集群扩缩容时,优化MOVED指令逻辑
- camellia-redis-proxy代理redis-cluster时,优化了renew的逻辑(1.2.0引入,导致redis节点宕机后刷新路由表不及时),感谢@saitama-24 发现这个问题
- 新增camellia-config模块,一个简单的kv配置中心,具体见:camellia-config
- camellia-redis-proxy新增NacosProxyDynamicConfLoader,一种新的集成nacos的方法,具体见:dynamic-conf
- camellia-redis-proxy中内建的ProxyPlugin支持自定义执行顺序(order),具体见:plugin
- camellia-redis-proxy优化了RedisConnection的实现
- camellia-redis-proxy支持接入camellia-config
- camellia-feign支持接入camellia-config
- camellia-redis-proxy中的PUBSUB系列命令的响应也需要统计到upstream-fail里面
- camellia-redis-proxy-hbase的内存队列支持动态调整容量
- camellia-delay-queue-server定时任务增加一个单机并发控制,优化资源使用
- 优化了IPMatcher的实现,从而可以处理
10.22.23.1/24
的判断
- 修复camellia-redis-proxy使用custom自定义路由模式时,多读场景下的自动剔除异常后端功能不生效的问题
- 修复camellia-redis-proxy同时使用converterPlugin的key转换功能和hotKeyCachePlugin时,热key缓存功能不生效的问题
- camellia-redis-proxy支持根据后端resource统计请求失败的情况,具体见:monitor-data
- camellia-redis-proxy细化了后端redis异常时返回给客户端的错误描述信息
- camellia-redis-proxy的/prometheus端点调整了部分metrics的type
- camellia-redis-proxy优化了RedisConnection的状态判断的实现逻辑
- 修复camellia-redis-proxy使用info upstream-info命令获取到的后端redis地址的密码没有mask的问题
- 无
- 重构了ProxyDynamicConf,支持自定义loader
- 修复RedisConnection心跳异常后没有关闭连接(1.2.0引入)
- redis-proxies和redis-proxies-discovery两种redis-resource支持设置db,包括camellia-redis-proxy和CamelliaRedisTemplate
- camellia-redis-proxy支持select命令,当前仅当后端是redis-standalone/redis-sentinel/redis-proxies或者其分片/读写分离等的组合时支持设置非0的db,如果后端有redis-cluster类型的resource,则只支持select 0
- CamelliaRedisTemplate支持RedisProxiesDiscoveryResource这种资源
- camellia-redis-proxy-hbase支持配置upstream.redis.hbase.command.execute.concurrent.enable(默认false),从而提高客户端使用pipeline批量提交命令时的执行效率,但是要求客户端是阻塞性的提交方式,否则可能导致命令乱序执行
- 重命名DefaultTenancyNamespaceKeyConverter -> DefaultMultiTenantNamespaceKeyConverter
- 修复了使用jedis3+SpringRedisTemplate+zk/eureka接入proxy的相关jar包的依赖错误问题(打包时使用了jedis2打包导致类找不到)
- 修复了使用CamelliaRedisProxyZkFactory+CamelliaRedisTemplate接入camellia-redis-proxy时,bid/bgroup不生效的问题
- CamelliaRedisTemplate里这个pipeline方法应该是读方法而不是写方法:Response zcard(String key)
- 新增camellia-redis3模块以及相关模块,支持jedis3.x(默认使用v3.6.3)
- 把camellia-redis-client和camellia-redis-proxy的公共部分组成camellia-redis-base模块,从而camellia-redis-proxy不再依赖camellia-redis-client
- camellia-redis-proxy支持自定义upstream模块,核心接口:IUpstreamClientTemplate和IUpstreamClientTemplateFactory
- camellia-redis-proxy-hbase冷热分离存储,从自定义CommandInvoker改成自定义upstream,从而有更多代码复用,并且修改了线程模型(新增了工作线程池和netty-worker线程池隔离)
- camellia-tools新增CamelliaLinearInitializationExecutor,支持资源的异步线性初始化
- camellia-redis-proxy引入CamelliaLinearInitializationExecutor,对多租户upstream初始化逻辑进行了重构
- camellia-redis-proxy在多读场景下,支持对后端进行健康检查,自动剔除故障节点
- camellia-redis-proxy支持异步初始化到后端redis的连接
- camellia-redis-proxy支持监控秒级的qps
- camellia-redis-proxy代理redis-cluster时除了MOVED/disconnect触发renew外,新增兜底的定时renew,默认600s一次
- camellia-hbase支持url中设置userName和password以及aliyun-lindorm的标记
- camellia-redis-proxy优化了redis-cluster-slaves和redis-sentinel-slaves两种resource在有节点宕机下的failover逻辑
- camellia-redis-proxy优化了redis-proxies和redis-proxies-discovery两种resource在有节点宕机下的failover逻辑
- camellia-redis-proxy支持在application.yml中配置dynamic.conf.file.name来代替camellia-redis-proxy.properties文件
- camellia-redis-proxy相关核心类进行了重命名(upstream部分)
- camellia-redis移除了CamelliaRedisTemplate到SpringRedisTemplate的适配器
- camellia-redis移除了CamelliaRedisTemplate到Jedis的适配器
- 新增camellia-redis-toolkit模块,把camellia-redis中的toolkit相关功能(如分布式锁等)独立出来,从而可以被camellia-redis3复用
- 使用按照包启动(redis-proxy、delay-queue、id-gen-server)时,新增camellia的banner
- camellia-redis-proxy修复了使用ProxyDynamicConf#reload(Map)方法直接设置自定义变量时(而非基于camellia-redis-proxy.properties文件),配置被清空的问题,1.1.8引入该问题
- camellia-redis-proxy支持使用transport_native_epoll、transport_native_kqueue、transport_native_io_uring,默认使用jdk_nio,具体见:netty-conf
- camellia-redis-proxy支持配置TCP_QUICKACK参数,当前仅当使用transport_native_epoll时支持,感谢@tain198127 ,具体见:netty-conf ,关联issue: issue-87
- RedisProxyJedisPool新增AffinityProxySelector,支持亲和性配置,感谢@tain198127 提供该功能
- id-gen-sdk底层线程池默认使用共享模式,减少初始化多个sdk实例时的线程数量占用
- delay-queue-sdk底层线程池默认使用共享模式,减少初始化多个sdk实例时的线程数量占用
- RedisProxyJedisPool底层线程池默认使用共享模式,减少初始化多个实例时的线程数量占用
- id-gen-server新增bootstrap模块,提供直接运行的安装包
- delay-queue-server新增bootstrap模块,提供直接运行的安装包
- fix了CamelliaStatistics在count=0时计算avg报错的问题
- 无
- 回滚了1.1.8中对于BulkReply的堆外内存优化(当客户端连接在收到reply之前断开连接,可能导致BulkReply中的ByteBuf没有release,引起内存泄漏)
- 修复camellia-redis-proxy,当客户端连接在收到reply之前断开连接,可能导致BulkReply中的ByteBuf没有release,1.1.8引入
- camellia-redis-proxy新增对prometheus/grafana的支持,感谢@tasszz2k ,具体见:prometheus-grafana
- camellia-tools新增CamelliaDynamicExecutor和CamelliaDynamicIsolationExecutor工具类,以及线程池监控工具CamelliaExecutorMonitor
- camellia-core包下面部分utils类,迁移到camellia-tools
- camellia-redis-proxy优化了默认提供的DefaultTenancyNamespaceKeyConverter在包含hashtag的key的行为,从而兼容更多场景, 感谢@phuc1998 和 @tasszz2k
- 修复camellia-redis-proxy在使用TRANSACTION系列命令时,如果有较高的客户端qps,导致的后端redis连接泄漏的问题, 感谢@phuc1998 和 @tasszz2k 发现了这个bug
- 修复camellia-redis-proxy使用PUBSUB系列命令时一个reply编解码的并发问题,1.1.8引入
- camellia-redis-proxy提供了DynamicRateLimitProxyPlugin,支持使用camellia-dashboard进行动态配置,感谢@tasszz2k
- 调整了项目maven结构
- 重命名了camellia-redis-proxy的artifactId为camellia-redis-proxy-core,camellia-redis-proxy变成目录
- 修复CamelliaRedisTemplate使用RedisResource时select db不生效的问题
- 修复了camellia-delay-queue的中文乱码问题,感谢@ax3353
- 新增camellia-cache模块,增强spring-cache,具体见:cache
- camellia-redis-proxy新增对LMPOP和BLMPOP命令的支持(redis7.0)
- 优化camellia-id-gen-sdk,id-gen-server的任何异常(不只是网络异常)都要触发节点屏蔽和请求重试
- camellia-delay-queue的getMsg接口,在消息已经被消费,且消息还在缓存中的情况下,获取的结果是200,但是没有消息内容
- camellia-redis-proxy支持通过application.yml配置ProxyDynamicConf中自定义的k-v配置项(优先级低于camellia-redis-proxy.properties)
- camellia-redis-proxy提供了DefaultTenancyNamespaceKeyConverter,可以基于租户(bid/bgroup)进行key的命名空间隔离
- camellia-redis-proxy新增对ZMPOP和BZMPOP命令的支持(redis7.0)
- camellia-redis-proxy-samples中移除zk和nacos的依赖(如果需要,自行添加相关依赖即可)
- camellia-redis-proxy使用ConverterProxyPlugin和KeyConverter进行key命名空间隔离时,SCAN命令不带MATCH字段时也需要执行KeyConverter#convert
- camellia-redis-proxy使用堆外内存优化了BulkReply的编解码性能
- camellia-redis-proxy支持全局配置租户级别的连接数上限,感谢@tasszz2k
- fix camellia-delay-queue使用长轮询时,运行一段时间后长轮询失效的问题(没有hold住连接)
- fix camellia-redis-proxy当使用ConverterProxyPlugin进行key转换时,没有处理TairZSet的EXBZPOPMAX/EXBZPOPMIN的回包中的key
- camellia-redis-proxy新增对ZINTERCARD命令的支持
- camellia-redis-proxy新增对TairZSet、TairHash、TairString的支持
- camellia-redis-proxy新增对RedisJSON的支持
- camellia-redis-proxy新增对RedisSearch的支持
- camellia-redis-proxy代理到redis-standalone/redis-sentinel时,支持设置后端的db
- CamelliaRedisTemplate请求redis-standalone/redis-sentinel时,支持设置db
- 调整了camellia-dashboard配置camellia-redis-proxy的ip黑白名单的配置接口,感谢@tasszz2k
- 无
- 无
- camellia-redis-proxy优化了统计模块的实现,优化内存和GC
- 无
- CamelliaStatistic工具类支持统计分位数(p50、p75、p90、p90、p95、p99、p999)
- camellia-redis-proxy的耗时监控支持统计分位数(p50、p75、p90、p90、p95、p99、p999),具体见:monitor-data
- 提供FileBasedCamelliaApi,支持使用本地properties配置文件模拟camellia-dashboard
- camellia-feign支持使用本地配置文件提供动态参数的能力(如超时、熔断、路由等参数)
- camellia-core双写/分片执行线程池支持设置拒绝策略
- camellia-feign初始化时,如果依赖的后端服务整体宕机了,当前服务不是报错而是打印warn日志
- camellia-feign使用动态路由时,如果远端(camellia-dashboard)返回404,则使用本地路由代替,而不是报错
- camellia-feign在设置双写线程池设置为Abort策略后,如果触发RejectedExecutionException,也回调CamelliaFeignFailureListener
- 无
- 访问camellia-dashboard的相关API时支持自定义header头,感谢@tasszz2k提供该功能
- camellia-redis-proxy在配置双写时也支持PUBSUB系列命令
- 新增任务合并工具类,具体见:toolkit
- camellia-redis-proxy重构并优化了ReplyDecoder的实现和性能
- 修复camellia-delay-queue使用长轮询时线程池泄漏的问题
- CamelliaRedisTemplate支持RedisProxiesResource这种redis资源配置
- camellia-redis-proxy新增CommandDisableProxyPlugin,可以限制某些命令在proxy上的访问
- camellia-delay-queue,deleteMsg支持立即释放redis内存(默认false)
- 优化了camellia-redis-proxy代理redis-cluster时的renew策略,优先使用地址串中的ip:port,其次使用master节点,再次使用slave节点,并且加一个随机
- camellia-delay-queue,当消息被消费或者删除后,此时相同的msgId的消息重新发送会被去重
- 修复proxy配置密码时,redis-benchmark无法工作的问题(v1.1.0引入),根因:当auth和其他命令通过pipeline一起提交时,proxy没有正确处理
- CamelliaRedisProxyStarter支持启动console-server
- RedisProxyRedisConnectionFactory实现DisposableBean接口,支持destroy方法
- camellia-redis-proxy新增cluster-mode,从而可以把proxy集群伪装成redis-cluster
- camellia-id-gen-sdk新增DelayQueueServerDiscoveryFactory方便管理多个基于注册发现的delay-queue-server集群
- camellia-redis-proxy支持COMMAND命令,透传给后端
- 自定义监控回调(MonitorCallback、SlowCommandMonitorCallback、HotKeyCacheStatsCallback、HotKeyMonitorCallback、BigKeyMonitorCallback)走独立的线程池执行回调,避免不合理的自定义监控回调实现阻塞proxy主流程
- camellia-redis-proxy随机端口功能没有校验端口是否被占用
- 修复camellia-redis-proxy中SpringProxyBeanFactory不生效的问题
- camellia-redis-proxy代理redis-cluster时也支持TRANSACTION系列命令(MULTI/EXEC/DISCARD/WATCH/UNWATCH)
- 优化了AsyncCamelliaRedisTemplate和AsyncCamelliaRedisClusterClient的代码实现
- 调整了内建ProxyPlugin的默认顺序(热key监控修改为优先于热key缓存监控)
- 无
- 重构camellia-redis-proxy插件和监控体系,相关功能统一为新的框架下面,具体见:redis-proxy
- 无
- 无
- camellia-delay-queue支持使用长轮询接口消费延迟消息,具体见:delay-queue
- 新增camellia-console模块,用于管理多组camellia-dashboard集群,感谢@HongliangChen-963提供该模块
- 新增CamelliaStatisticsManager用于管理多个CamelliaStatistics对象
- camellia-redis-proxy优化了AsyncCamelliaRedisTemplate的初始化逻辑
- fix了camellia-redis-proxy使用分片或者代理到redis-cluster时执行ZINTERSTORE/ZUNIONSTORE/ZDIFFSTORE命令失败的问题
- fix了camellia-feign中,当后端服务异常的情况下,调用方进程启动时,由于DiscoveryResourcePool初始化失败产生的内存泄漏问题
- 新增camellia-delay-queue模块,可以用于实现延迟队列功能,具体见:delay-queue
- camellia-feign新增failureListener,包括CamelliaNakedClient和CamelliaFeignClient都支持,可以用于监控,也可以用于失败重试
- camellia-tools新增CamelliaStatistics工具类,可以用于计数、求和、平均值、最大值等的统计
- camellia-redis新增CamelliaFreq工具类,可以用于频控,包括单机频控和集群频控
- camellia-redis-proxy在动态路由刷新时,生效之前增加对新路由的检查
- camellia-redis-proxy新增路由时,资源初始化改成异步,提升多租户间的隔离能力
- CamelliaRedisTemplate初始化redis-cluster时增加可用性判断(jedis/v2.9.3没有这个判断,新版本jedis有这个)
- 重命名NacosProxyDamicConfSupport为NacosProxyDynamicConfSupport
- CamelliaRedisTemplate执行eval/evalsha命令时使用超时配置(jedis2.9.3会移除超时,高版本jedis不会,和高版本保持一致)
- fix了camellia-dashboard中FeignChecker没有生效的问题(缺失了@Component注解)
- fix了RedisProxyJedisPool的SideCarFirstProxySelector下线proxy失败的问题
- camellia-core、camellia-feign调整异步双写线程模型,并新增支持MISC_ASYNC_MULTI_THREAD模式
- camellia-redis-proxy支持缓存透明双删,具体见:interceptor
- camellia-dashboard新增几个管理api
- CamelliaHashedExecutor支持获取完成任务数
- 调整了ProxyConstants的默认参数,调大了双写和分片使用的内部线程池的默认线程数
- camellia-redis-proxy在统计后端redis响应时间时,跳过发布订阅命令和阻塞型命令
- 升级fastjson版本,从1.2.76升级到1.2.83
- 修复了后端redis有密码且开启密码mask的情况下,监控的后端redis响应时间为0的问题
- camellia-redis-proxy的detect接口支持返回key总数/qps等信息,具体见:detect
- CamelliaIdGenSdkConfig支持设置OkHttpClient的keepAliveSeconds配置,默认30s
- 无
- 无
- 无
- fix CamelliaNakedClient双写无效的问题
- camellia-redis-proxy支持转发到其他proxy(如codis、twemproxy),且支持以注册发现模式去发现后端proxy节点列表,具体见:路由
- camellia-core支持异步双写(基于线程池+内存队列),进程内相同线程的多次写请求会保证顺序执行
- camellia-feign提供CamelliaNakedClient,用于支持自定义的调用(非标准feign客户端)
- camellia-redis-proxy支持BloomFilter相关的命令,具体见:redis-proxy
- camellia-redis-proxy内置一个基于ip校验客户端的拦截器(IPCheckerCommandInterceptor),具体见:拦截器
- DynamicValueGetter类从camellia-core包移动到camellia-tools包
- 无
- 无
- 无
- 修复camellia-feign熔断器过滤异常类型时的一个bug(没有把原始异常从InvocationTargetException中提取出来)
- 新增CamelliaCircuitBreaker熔断器
- camellia-feign支持熔断(接入CamelliaCircuitBreaker),支持spring-boot-starter,支持动态配置,具体见:camellia-feign
- camellia-redis-proxy自定义ProxyRouteConfUpdater支持删除已有路由,具体见:路由
- 无
- 无
- camellia-redis-proxy的console新增detect接口,从而可以把camellia-redis-proxy作为一个监控平台使用
- 无
- camellia-redis-proxy使用info upstream-info命令获取后端redis集群信息时,当后端是redis-cluster时抛异常,v1.0.51时引入
- 新增camellia-feign模块,feign支持动态路由,支持双写,支持动态调整超时时间等
- camellia-core新增CamelliaDiscovery/CamelliaDiscoveryFactory系列接口,统一camellia各模块下的discovery功能
- camellia-core新增ResourceTableUpdater/MultiResourceTableUpdater系列抽象类,统一camellia各模块下基于updater实现的动态路由功能
- camellia-redis移除了ProxyDiscovery抽象类,统一使用IProxyDiscovery接口,并继承自CamelliaDiscovery接口
- camellia-id-gen移除了AbstractIdGenServerDiscovery抽象类,统一使用IdGenServerDiscovery接口,并继承自CamelliaDiscovery接口
- 所有模块的最低jdk依赖都升级到jdk8
- 无
- 无
- camellia-redis-proxy的info命令回包中,换行符从\n替换为\r\n,从而适配redis-shake进行redis数据迁移,具体见:misc
- ZkProxyRegistry在调用了deregister方法取消注册后,如果网络异常导致proxy到zk的tcp连接重连,可能会导致camellia-redis-proxy重新注册到zk
- camellia-dashboard和camellia-redis-proxy某些情况下在日志中打印了后端redis的密码,感谢@chanjarster修复该问题
- camellia-redis新增CamelliaRedisLockManager,用于管理redis分布式锁的自动续约,具体见:toolkit
- camellia-redis新增CamelliaRedisTemplateManager,用于管理不同bid/bgroup的多组CamelliaRedisTemplate,具体见:dynamic-dashboard
- camellia-tools新增CamelliaHashedExecutor,用于执行相同hashKey的runnable/callable任务时是相同线程执行
- 无
- camellia-dashboard的deleteResourceTable接口,应该同步更新ResourceInfo的tid引用,感谢@chanjarster修复该bug
- camellia-redis-proxy支持script load/flush/exists,具体见:misc
- camellia-redis-proxy支持eval_ro/evalsha_ro,需要后端是redis7.0+
- camellia-redis-proxy监控后端redis响应耗时的监控数据支持密码脱敏
- scan在监控数据里应该是一个读命令而不是写命令,不影响功能,只是监控数据有误
- camellia-dashboard的getTableRefByBidGroup/deleteTableRef接口参数应该是bid而不是tid,感谢@chanjarster修复该bug
- camellia-redis-proxy在自定义分片策略下支持scan命令
- CamelliaRedisTemplate新增getReadJedisList/getWriteJedisList接口
- CamelliaRedisTemplate新增executeRead/executeWrite接口
- 无
- 无
- CamelliaRedisTemplate新增getJedisList接口
- 无
- 无
- 新增CRC16HashTagShardingFunc类和DefaultHashTagShardingFunc类,用于自定义分片时可以支持hashtag,具体见:路由
- 重命名shading为sharding,具体见:路由
- 无
- camellia-redis-proxy的KafkaMqPackConsumer支持配置批量消费和重试,具体见:拦截器
- camellia-redis-proxy提供DynamicCommandInterceptorWrapper用于动态组合多个拦截器,具体见:拦截器
- camellia-redis-proxy支持不开启console(设置端口为0即可),具体见:监控
- camellia-redis-proxy支持读redis-cluster的从节点,具体见:路由
- camellia-redis-proxy支持代理到多个其他无状态的proxy节点,如codis-proxy、twemproxy等,具体见:路由
- camellia-id-gen调整了若干参数的默认值
- 无
- camellia-redis-proxy新增KafkaMqPackProducerConsumer,proxy可以同时作为kafka的生产者和消费者,具体见:拦截器
- camellia-redis-proxy支持监控后端redis的响应时间,具体见:监控
- RedisProxyJedisPool支持jedis3,具体见:部署
- 调整代码结构,新建camellia-redis-proxy-plugins模块,camellia-redis-zk/camellia-redis-proxy-mq/camellia-redis-proxy-hbase平移到camellia-redis-proxy-plugins模块下
- camellia-redis-zk重命名为camellia-redis-proxy-discovery-zk,并归属于camellia-redis-proxy-discovery,相关类包名修改
- RedisProxyJedisPool相关类包名修改,代码从camellia-redis移动到camellia-redis-proxy-discovery
- camellia-redis-proxy的info gc命令修改返回格式,从而支持zgc等垃圾回收器,具体见:info
- 无
- camellia-id-gen的segment和strict模式新增更新号段起始值的update接口,具体见:id-gen
- camellia-id-gen的segment和strict模式,regionId字段支持设置偏移量,具体见:id-gen
- camellia-id-gen的segment模式支持跨单元同步,具体见:id-gen-segment
- camellia-id-gen新增解析regionId、workerId等的接口,具体见:id-gen
- camellia-redis-proxy支持基于消息队列(kafka等)的异地双写,具体见:拦截器
- camellia-redis-proxy的监控数据buffer增加最大size的限制以保护proxy
- camellia-redis-proxy的自定义ClientAuthProvider抛异常时关闭客户端连接
- 修复了camellia-id-gen-strict-spring-boot-starter的cache-key-prefix配置不生效的问题
- camellia-redis-proxy的info命令修改redis-cluster集群安全性指标的含义,具体见:info
- 通过console-api获取慢查询/大key监控数据时支持设置监控数据量的上限,具体见:monitor-data
- 无
- camellia-redis-proxy的info命令修改redis-cluster集群安全性指标的含义,具体见:info
- 无
- 无
- camellia-redis-proxy支持使用http-api执行info命令并获取相关信息,具体见:info
- camellia-redis-proxy的info命令新增返回bid/bgroup级别的客户端连接数数据数据,具体见:info
- 无
- 无
- camellia-redis-proxy支持配置客户端最大连接数(总连接数限制+bid/bgroup限制),默认不限制,具体见:客户端连接控制
- camellia-redis-proxy支持配置检测空闲客户端连接并关闭,默认不启用,具体见:客户端连接控制
- camellia-redis-proxy提供RateLimitCommandInterceptor,可以用于控制客户端请求速率(支持全局级别,也支持bid/bgroup级别),具体见:拦截器
- 使用/monitor获取camellia-redis-proxy的大key监控数据时,支持配置返回json的大小,具体见:监控数据
- camellia-redis-proxy开放更多netty参数配置,具体见:netty-conf
- camellia-redis-proxy提供camellia-redis-proxy-nacos-spring-boot-starter用于使用nacos托管proxy配置,具体见:nacos-conf
- 修改CommandInterceptor所属包名
- 无
- 新增camellia-id-gen模块,支持:snowflake策略(支持设置单元标记)、基于数据库的id生成策略(支持设置单元标记,趋势递增)、基于数据库和redis的id生成策略(支持设置单元标记,严格递增),具体见:id-gen
- camellia-redis-proxy支持自定义callback通过spring的@Autowired来自动注入,具体见:spring-autowire
- 移除了camellia-redis-toolkit模块,其中CamelliaCounterCache/CamelliaRedisLock合并到camellia-redis
- camellia-tools模块下包名重命名
- 无
- camellia-redis-proxy配置的后端redis支持使用账号+密码登录,具体见:route
- info命令获取后端redis连接数时,如果某个后端连接数是0,则不返回
- 增强ProxyDynamicConfHook,可以拦截ProxyDynamicConf的所有动态配置
- 扩大监控/日志打印时隐藏密码功能的范围
- 优化了CommandDecoder
- 修复了后端redis连接数的监控可能不准的问题(不影响核心功能)
- 新增camellia-tools模块,提供解压缩工具类CamelliaCompressor、加解密工具类CamelliaEncryptor、本地缓存工具类CamelliaLoadingCache,具体见:tools
- 新增了使用camellia-tools来实现camellia-redis-proxy数据解压缩、加解密的例子,具体见:转换
- camellia-redis-proxy支持自定义的ClientAuthProvider来实现通过password区分路由的方法,具体见:路由配置,感谢@yangxb2010000提供该功能
- camellia-redis-proxy支持设置使用随机端口,具体见:部署
- camellia-redis-proxy支持对key的自定义转换,从而你可以将单个redis集群划分成不同的命名空间(如添加不同的前缀),具体见:转换
- camellia-redis-proxy新增对RANDOMKEY命令的支持
- camellia-redis-proxy新增对HELLO命令的支持,不支持RESP3,但是支持通过HELLO命令setname和auth username password(如果客户端使用Lettuce6.x,则需要升级到本版本)
- camellia-redis-proxy代理到redis-cluster时支持scan命令,感谢@yangxb2010000提供该功能
- camellia-redis-proxy的info命令返回新增http_console_port字段,具体见:info
- camellia-redis-proxy的info命令返回新增redis_version字段,spring actuator默认会使用info命令返回的redis_version字段来做健康检查,这里直接返回一个固定的版本号,具体见:info
- camellia-redis-proxy的info命令中Stats部分的字段重命名(改成下划线),如:avg.commands.qps改成avg_commands_qps,具体见:info
- camellia-redis-proxy的info命令中Stats部分的qps字段取2位小数
- camellia-redis-proxy的auth/client/quit等命令的处理从ServerHandler迁移到CommandsTransponder
- fix工具类KeyParser对EVAL/EVALSHA/XINFO/XGROUP/ZINTERSTORE/ZUNIONSTORE/ZDIFFSTORE命令的key的解析
- camellia-redis-proxy支持对string/set/list/hash/zset相关命令的value自定义转换(可以用于透明的实现数据压缩、数据加解密等),具体见:转换
- camellia-redis-proxy新增对GETEX/GETDEL/HRANDFIELD/ZRANDMEMBER命令的支持
- camellia-redis-proxy的大key检测新增对GETDEL/GETEX命令的检测,新增对GETSET回包的检测
- 无
- 修复camellia-redis-proxy阻塞型命令不可用的问题(1.0.33引入)
- camellia-redis-proxy-hbase重构了string相关命令的冷热分离存储设计,具体见:文档
- CamelliaRedisTemplate提供Jedis适配器,修改一行代码从Jedis迁移到CamelliaRedisTemplate,具体见:文档
- CamelliaRedisTemplate提供SpringRedisTemplate适配器,具体见:文档
- camellia-redis-proxy提供一个不使用spring-boot-starter启动proxy的简单封装工具类CamelliaRedisProxyStarter,具体见:文档
- camellia-redis-proxy移除jedis的依赖
- 无
- camellia-redis-proxy提供TroubleTrickKeysCommandInterceptor去避免异常key导致后端redis异常(比如业务层bug导致的死循环引起后端redis被打挂,需要临时屏蔽相关请求来保护后端redis),具体见:拦截器
- camellia-redis-proxy提供MultiWriteCommandInterceptor用于自定义双写策略(比如有些key需要双写,有些key不需要,有些key双写到redisA,有些key双写到redisB),具体见:拦截器
- camellia-redis-proxy支持DUMP/RESTORE命令
- CamelliaRedisTemplate支持DUMP/RESTORE命令
- 无
- camellia-redis-proxy的BITPOS应该是读命令
- CamelliaRedisTemplate的BITPOS应该是读命令
- camellia-redis-proxy-hbase新增对string/hash相关命令的冷热分离存储的支持,具体见:文档
- 无
- 无
- info命令支持section参数,且支持获取后端redis集群的信息(内存使用率、版本、主从分布情况、slot分布情况等),具体见:监控
- 无
- 修复先调用subscribe/psubscribe,再调用unsubscribe/punsubscribe之后,对应的后端redis连接没有释放的问题
- 无
- 初始化和动态更新路由配置时打印的日志也需要支持隐藏密码
- 修复打开慢查询/大key监控时,使用subscribe/psubscribe命令时,收到超过一定数量消息后的NPE问题(会导致不能收到后续的消息)
- 代理到redis-cluster时:subscribe/psubscribe支持在同一个长连接内多次订阅,并且unsubscribe/punsubscribe后,客户端连接可以用于普通命令(老版本proxy只能调用subscribe/psubscribe一次,并且调用后就不能unsubscribe/punsubscribe)
- 无
- 无
- 修复阻塞式命令偶现的not_available问题(1.0.27引入)
- 无
- 修复使用pipeline一次性提交多个阻塞型命令时可能导致not_available的问题(1.0.27引入)
- 无
- 无
- 修复使用阻塞型命令时如果单连接tps较高时导致到后端redis连接过多的问题
- camellia-redis-proxy支持单独配置端口和applicationName(优先级高于spring的server.port/spring.application.name)
- ProxyDynamicConf支持直接把k-v的配置项map设置进去(之前只能从指定某个文件去读取)
- camellia-redis-proxy重命名LoggingHoyKeyMonitorCallback为LoggingHotKeyMonitorCallback
- camellia-redis-proxy删除基于Disruptor/LinkedBlockingQueue的命令转发模式,仅保留直接转发的模式
- camellia-redis-proxy统计日志的logger名字变更(增加camellia.redis.proxy.前缀),如LoggingMonitorCallback.java
- camellia-redis-proxy重命名BigKeyMonitorCallback的回调方法,callbackUpstream/callbackDownstream变更为callbackRequest/callbackReply
- camellia-redis-proxy性能优化
- 无
- camellia-redis-proxy支持关闭到后端redis的空闲连接,默认开启
- camellia-redis-proxy支持监控到后端redis的连接数,具体见:监控数据
- 无
- camellia-redis-proxy代理redis-cluster时,fix在极端边界情况下可能触发的死锁问题
- camellia-redis-proxy新增ProxyRouteConfUpdater,用户可以自定义实现基于bid/bgroup的多组动态路由配置(比如对接到自己的配置中心,这样就不用依赖camellia-dashboard了),具体见:路由配置
- 提供了ProxyRouteConfUpdater的一个默认实现DynamicConfProxyRouteConfUpdater,该实现使用DynamicConfProxy(camellia-redis-proxy.properties)来管理多组路由配置以及配置的动态更新
- camellia-redis-proxy新增ProxyDynamicConfHook,用户可以基于hook来自定义的动态修改相关配置,具体见:动态配置
- camellia-redis-proxy新增监控相关callback的DummyMonitorCallback的实现,如果不想打印相关统计日志,设置为dummy的callback实现即可
- camellia-redis-proxy监控指标里新增路由相关的监控项,包括到各个redis后端的请求数,以及当前生效的路由配置,具体见:监控数据
- camellia-redis-proxy耗时监控增加业务级别的数据(bid/bgroup),具体见:监控数据
- 无
- 无
- 无
- 更新netty版本到4.1.63
- 修复jdk8下ConcurrentHashMap的computeIfAbsent方法的一个性能bug,修复见:CamelliaMapUtils,bug见:https://bugs.openjdk.java.net/browse/JDK-8161372
- CamelliaRedisTemplate支持从redis-sentinel集群中的从节点读数据(会自动感知节点宕机、主从切换和节点扩容),具体见:RedisSentinelResource和JedisSentinelSlavesPool
- camellia-redis-proxy支持从redis-sentinel集群中的从节点读数据(会自动感知节点宕机、主从切换和节点扩容),具体见:路由配置
- CamelliaRedisTemplate使用camellia-redis-spring-boot-starter接入时,在访问camellia-redis-proxy时支持设置bid/bgroup
- camellia-redis-proxy预热失败时启动失败
- 无
- camellia-redis-proxy在使用本地配置时,支持动态修改路由转发规则,见:路由配置
- camellia-redis-proxy的ProxyDynamicConf(camellia-redis-proxy.properties)支持使用外部独立的配置文件进行覆盖,见动态配置
- camellia-redis-proxy增加预热功能(默认开启),若开启,则proxy启动时会提前创建好到后端的连接,而不是等实际流量过来时再初始化到后端的连接
- camellia-redis-spring-boot-starter/camellia-hbase-spring-boot-starter使用本地配置文件配置路由时,也支持动态变更
- camellia-redis-proxy通过动态配置文件关闭RT监控时同步关闭慢查询监控,和yml配置逻辑保持一致
- camellia-spring-redis-{zk,eureka}-discovery-spring-boot-starter增加开关(默认开启)
- RedisProxyJedisPool增加jedisPoolLazyInit参数用于延迟初始化jedisPool,以提高RedisProxyJedisPool的初始化速度,默认开启,默认先初始化优先级最高的16个proxy的jedisPool
- fix了RedisProxyJedisPool一个bug,概率极低,会导致异常"Could not get a resource from the pool"(1.0.14时引入)
- fix了camellia-redis-proxy使用fat-jar运行时配置文件找不到的问题
- 无
- 重构camellia-redis-proxy-hbase,和老版本不兼容,见 文档
- 优化了camellia-redis-proxy开启命令耗时监控下的性能
- 无
- 无
- camellia-redis-proxy性能提升,见 v1.0.19
- 修复调用KeyParser获取xinfo/xgroup的key时的错误返回,修复使用pipeline方式调用xinfo/xgroup时可能出现的bug
- 新增console的http-api接口/reload去重新加载ProxyDynamicConf
- 支持HSTRLEN/SMISMEMBER/LPOS/LMOVE/BLMOVE
- 支持ZMSCORE/ZDIFF/ZINTER/ZUNION/ZRANGESTORE/GEOSEARCH/GEOSEARCHSTORE
- 开放ProxyDynamicConf的动态配置功能,例子:你在camellia-redis-proxy.properties添加了"k=v",则你可以调用ProxyDynamicConf.getString("k")获取到"v",具体详见ProxyDynamicConf类
- 若配置了双(多)写,阻塞式命令直接返回不支持
- 无
- 代理到redis/redis-sentinel,且无分片/无读写分离时,支持事务命令(WATCH/UNWATCH/MULTI/EXEC/DISCARD)
- 支持ZPOPMIN/ZPOPMAX/BZPOPMIN/BZPOPMAX
- 无
- 修复ReplyDecoder的一个bug,proxy将nil的MultiBulkReply改成了empty的MultiBulkReply返回的问题(实现事务命令时发现)
- 修复了ProxyDynamicConf初始化时的一个NPE,该报错不影响ProxyDynamicConf的功能,只是会在proxy(v1.0.16)启动时打印一次错误日志
- 部分参数支持动态变更
- camellia-redis-zk-registry支持注册主机名
- 优化了若干并发初始化的加锁过程
- 无
- 无
- HotKeyMonitor的json新增字段times/avg/max
- LRUCounter更新,使用LongAdder替换AtomicLong
- 无
- 无
- RedisProxyJedisPool的兜底线程在刷新proxy列表时,即使ProxySelector已经持有了该proxy,仍然调用add方法,避免偶尔的超时等异常导致proxy负载不均衡
- 无
- 无
- IpSegmentRegionResolver允许设置空的config,从而camellia-spring-redis-eureka-discovery-spring-boot-starter和camellia-spring-redis-zk-discovery-spring-boot-starter启动时regionResolveConf参数可以缺省
- 无
- RedisProxyJedisPool允许设置自定义的proxy选择策略IProxySelector,默认使用RandomProxySelector,若开启side-car优先,则使用SideCarFirstProxySelector
- RedisProxyJedisPool在使用SideCarFirstProxySelector时,proxy的访问优先级:同机部署的proxy -> 相同region的proxy -> 其他proxy,声明proxy属于哪个region,需要你传入RegionResolver,默认提供了一个基于ip段划分region的IpSegmentRegionResolver
- 新增LocalConfProxyDiscovery
- 优化了camellia-redis-proxy在代理redis-cluster时后端redis宕机时的快速失败策略
- camellia-redis-proxy刷新后端slot分布信息的操作改成异步执行
- 修复了一个redis-cluster刷新slot信息的一个bug(1.0.9时引入)
- camellia-redis-proxy支持设置监控回调MonitorCallback
- camellia-redis-proxy支持慢查询监控,支持设置SlowCommandMonitorCallback
- camellia-redis-proxy支持热key监控,支持设置HotKeyMonitorCallback
- camellia-redis-proxy支持热key在proxy层的本地缓存(仅支持GET命令),支持设置HotKeyCacheStatsCallback
- camellia-redis-proxy支持大key监控,支持设置BigKeyMonitorCallback
- camellia-redis-proxy支持配置读写分离时设置多个读地址(随机选择一个地址读)
- CamelliaRedisTemplate支持获取原始Jedis
- RedisProxyJedisPool支持side-car模式,开启后优先访问同机部署的redis-proxy
- camellia-redis-proxy的console支持根据api(默认是http://127.0.0.1:16379/monitor)获取监控数据(包括tps/rt/慢查询/热key/大key/热key缓存等)
- 新增camellia-spring-redis-zk-discovery-spring-boot-starter,方便使用SpringRedisTemplate的客户端以注册中心模式接入proxy
- 修改了CommandInterceptor接口的定义
- fix自定义分片时mget的NPE问题(1.0.10引入的bug)
- 修复了redis sentinel在proxy上切换时的一个bug
- camellia-redis-proxy支持阻塞式命令,如BLPOP/BRPOP/BRPOPLPUSH等
- camellia-redis-proxy支持redis5.0的stream命令,包括阻塞式的XREAD/XREADGROUP
- camellia-redis-proxy支持pub-sub命令
- camellia-redis-proxy支持集合运算命令,如SINTER/SINTERSTORE/SUNION/SUNIONSTORE/SDIFF/SDIFFSTORE等
- camellia-redis-proxy支持设置双(多)写的模式,提供了三种方式供选择, 参考com.netease.nim.camellia.redis.proxy.conf.MultiWriteMode以及相关文档
- camellia-redis-proxy提供了抽象类AbstractSimpleShardingFunc用于自定义分片函数
- camellia-redis-proxy-hbase支持了针对zmember到hbase的读穿透的单机频控
- camellia-redis-proxy-hbase增加了对zset从hbase重建缓存时的保护逻辑
- 修复了CamelliaHBaseTemplate在双(多)写时执行批量删除时的bug
- camellia-redis-proxy的async模式支持redis sentinel
- camellia-redis-proxy的async模式支持统计命令的执行时间
- camellia-redis-proxy的async模式支持CommandInterceptor,自定义拦截规则
- 新增camellia-redis-zk注册发现组件,提供一个使用注册中心模式使用camellia-redis-proxy的默认实现
- camellia-redis-proxy-hbase新增hbase读穿透的单机流控
- 调整camellia-redis-proxy的sendbuf和rcvbuf的默认值,且在回包时不判断channel是否writable,避免超大包+pipeline场景下可能channel not writeable而回包失败
- 移除了camellia-redis-proxy的sync模式
- camellia-redis-proxy的async模式性能优化,具体可见性能报告
- 无
- camellia-redis-proxy的async模式支持eval和evalsha指令
- CamelliaRedisTemplate支持eval/evalsha
- CamelliaRedisLock使用lua脚本来实现更严格的分布式锁
- camellia-redis-proxy的若干优化
- 无
- camellia-redis-proxy-hbase新增hbase读请求并发情况下的穿透保护逻辑
- camellia-redis-proxy-hbase对hbase读写新增单次批量限制(批量GET和批量PUT)
- camellia-redis-proxy-hbase的hbase写操作支持设置为ASYNC_WAL
- camellia-redis-proxy-hbase的type命令支持缓存null
- camellia-redis-proxy-hbase新增降级配置,hbase读写操作纯异步化(可能会导致数据不一致)
- 优化了部分监控的性能(LongAdder代替AtomicLong)
- camellia-redis-proxy-hbase的配置使用HashMap代替Properties避免锁竞争
- camellia-redis-proxy的若干性能优化
- 无
- camellia-redis-proxy-hbase提供了异步刷hbase的模式,减少端侧的响应RT(使用redis队列做缓冲),默认关闭
- 优化了RedisProxyJedisPool的实现,增加自动禁用不可用Proxy的逻辑
- camellia-hbase-spring-boot-starter在使用remote配置时,默认开启监控
- 修复了camellia-redis-proxy在async模式下处理pipeline请求时可能乱序返回的bug
- 新增camellia-redis-eureka-spring-boot-starter,方便spring boot工程以直连camellia-redis-proxy的模式接入(通过eureka自动发现proxy集群),从而不需要LVS/VIP这样的组件
- 优化CamelliaRedisLock的实现
- 优化camellia-redis-proxy-hbase的实现
- 更新了camellia-redis-proxy-hbase监控指标(见RedisHBaseMonitor类和RedisHBaseStats类)
- 修复camellia-dashboard的swagger-ui的中文乱码问题
第一次发布