- camellia-redis-proxy支持根据后端resource统计请求失败的情况,具体见:monitor-data
- camellia-redis-proxy细化了后端redis异常时返回给客户端的错误描述信息
- camellia-redis-proxy的/prometheus端点调整了部分metrics的type
- 修复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的中文乱码问题
第一次发布