1. Redis相关技术选型调研
1.1. 目的
为了实现私有化Redis集群,调研Redis版本选型、集群方案选型及Java、Golang语言客户端选型。
1.2. Redis版本选择
1.2.1. Redis版本对比
目前Redis有两大版本5.0.x和6.0.x,如下是对比表格:
对比项目 | Redis 5.0.x | Redis 6.0.x |
---|---|---|
当前分支 | Old | Stable |
GA版本发布日期 | 2018-10-17 | 2020-04-30 |
当前版本号 | 5.0.10 | 6.0.10 |
当前版本发布日期 | 2020-10-26 | 2021-01-12 |
升级迫切性 | 中 | 中 |
上一次升级高迫切性版本 | 5.0.8 | 6.0.8 |
上一次升级高迫切性版本发布日期 | 2020-03-12 | 2020-09-09 |
官方升级迫切性定义:
- 低:除非要使用新功能,否则无需升级。
- 中等:对服务器进行升级编程,但这并不紧急。
- 高:存在一个严重的错误,可能会影响部分用户。升级!
- 严重:有一个影响大多数用户的严重错误。尽快升级。
- 安全性:版本中包含安全性修复程序。
Redis 6.0 新特性介绍:
https://zhuanlan.zhihu.com/p/140466294
1.2.2. Redis版本选择
根据上面对比,6.0.10版本已经进入较为稳定阶段,且支持较多新特性,建议使用该版本进行集群环境部署。
1.3. Redis集群方案选型
常见的Redis集群方案有以下几种:
- 客户端分片;
- Codis;
- Twemproxy;
- Redis Cluster;
1.3.1. Redis集群方案对比
对比项目 | 客户端分片 | Codis | Twemproxy | Redis Cluster |
---|---|---|---|---|
发布组织 | - | 豌豆荚 | 官方 | |
当前版本 | - | 3.2.2 | 0.4.1 | 6.0.10 |
发布日期 | - | 2018/1/29 | 2015/6/23 | 2021/1/12 |
使用方式 | Client维护路由直连Redis | 通过Proxy访问 | 通过Proxy访问 | Client内置路由规则直连Redis |
性能 | 高 | 有损耗 | 有损耗 | 高 |
Pipeline | 支持 | 支持 | 支持 | 仅支持单个节点 Pipeline,不支持跨节点 |
客户端是否需要关心 | 是 | 否 | 否 | 否 |
支持在线水平扩容 | 不支持 | 支持 | 不支持 | 支持 |
可维护性 | 运维简单,开发人员维护成本高 | 组件较多,部署复杂 | 部署简单 | 运维简单,官方维护 |
故障自动恢复 | 需部署哨兵 | 需部署哨兵 | 需部署哨兵 | 内置哨兵 |
1.3.2. Redis集群方案选择
根据对比,建议选择Redis Cluster方案,实施细节还需进一步调研。
1.4. Redis客户端选型
目前使用语言栈为:Java、Golang、Python。
客户端官方列表:https://redis.io/clients
1.4.1. Java 客户端选型
官方推荐如下三种:
对比项目 | Jedis | lettuce | Redisson |
---|---|---|---|
当前版本 | 3.5.1 | 6.0.2 | 3.15.0 |
发布日期 | 2021/1/23 | 2021/1/12 | 2021/1/29 |
特点 | 比较全面的提供了Redis的操作特性 | 高级 Redis 客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。 | 实现了基于Redis的一些高级能力,如:分布式锁、延迟队列等 |
实现与使用 | 实现简单,使用简单 | 实现较为复杂,使用简单 | 实现复杂,使用简单 |
网络 | 阻塞IO | Netty | Netty |
Redis连接 | 使用连接池 | 共享连接,线程安全,且自动重连 | 共享连接 |
社区维护 | 更新快 | 更新快 | 氛围企业版和开源版,更新快 |
其他 | SpringBoot 1.x 默认使用 | SpringBoot 2.x 默认使用 | github star最高 |
建议默认使用 lettuce,如果有特殊需求,如分布式锁,延时队列等可以使用Redisson。
1.4.2. Golang 客户端选型
官方推荐如下两个:
对比项目 | Radix | Redigo | go-redis/redis(官方无特别推荐) |
---|---|---|---|
当前版本 | 3.7.0 | 1.8.4 | 8.5.0 |
发布日期 | 2021/1/10 | 2021/2/19 | 2021/2/4 |
star | 485 | 8.2k | 10.8k |
建议使用Redigo
1.4.3. Python 客户端选型
对比项目 | redis-py | walrus |
---|---|---|
当前版本 | 3.5.3 | 0.8.1 |
发布日期 | 2020/6/2 | 2020/4/4 |
star | 9.1k | 835 |
建议使用 redis-py
1.5. 总结
综上,Redis版本建议选择 6.0.10,Redis集群方案建议选择 Redis Cluster。
Java 客户端建议选择 lettuce,有需要的可以使用 Redisson。 Golang 客户端建议选择 Redigo。 Python 客户端建议选择 redis-py。