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。