- camellia-redis-proxy支持基于注册中心的Lettuce的简单的接入方案
- camellia-redis-proxy支持redis6.0的client-cache特性
- camellia-redis-proxy支持监控数据可视化到prometheus等平台
- 新增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的中文乱码问题
第一次发布