Redis相关技术选型调研

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
发布组织 - 豌豆荚 Twitter 官方
当前版本 - 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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章