为什么 Redis 集群要使用反向代理? 看这篇就明白了!

2022-03-10 12:41:14 浏览数 (1)

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

  • 原创 | Java 2021 超神之路,很肝~
  • 中文详细注释的开源项目
  • RPC 框架 Dubbo 源码解析
  • 网络应用框架 Netty 源码解析
  • 消息中间件 RocketMQ 源码解析
  • 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析
  • 作业调度中间件 Elastic-Job 源码解析
  • 分布式事务中间件 TCC-Transaction 源码解析
  • Eureka 和 Hystrix 源码解析
  • Java 并发源码

来源:www.cnblogs.com/Courage

129/p/14351545.html

  • 如何使用代理?
  • Redis代理插件
  • 代理详细功能对比

如果没有反向代理,一台Redis可能需要跟很多个客户端连接:

看着是不是很慌?看没关系,主要是连接需要消耗线程资源,没有代理的话,Redis要将很大一部分的资源用在与客户端建立连接上,redis的高可用和可扩展无论是自带的Redis Sentinel还是Redis Cluster都要求客户端进行额外的支持,而目前基本上没有合适的客户端能够做这些事情,客户端来做这些事情也并不合适,它会让维护变得特别困难。

因此在客户端和redis服务端之间加一层代理成了一种理想的方案,代理屏蔽后端Redis实现细节向客户端提供redis服务,可以完美的解决Redis的高可用和扩展性问题,同时代理的引入也使得Redis维护变得更加简单。

于是乎,有了代理:

如何使用代理?

很简单,将请求连接到调度代理器上,由Proxy负责将请求转发到后面的Redis服务实例,图示:

又有了新的问题,Proxy挂了可咋整?

所以Proxy又需要做集群,甚至前面可以加一层负载均衡,负载均衡嘛,单机也存在单点故障等问题,一个Director肯定不行,搞不好又挂了,所以整一个主备,备机通过KeepAlived来检测主LVS健康状况,出了问题顶上去。

基于 Spring Boot MyBatis Plus Vue & Element 实现的后台管理系统 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

Redis代理插件

Redis代理插件有很多,这儿简单介绍几款

predixy

高性能全特征redis代理,支持Redis Sentinel和Redis Cluster

twemproxy

快速、轻量级memcached和redis代理

codis

redis集群代理解决方案

redis-cerberus

Redis Cluster代理

基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot Dubbo 。未来,会重构成 Spring Cloud Alibaba 。 项目地址:https://github.com/YunaiV/onemall

代理详细功能对比

特性

predixy

twemproxy

codis

redis-cerberus

高可用

Redis Sentinel或Redis Cluster

一致性哈希

Redis Sentinel

Redis Cluster

可扩展

Key哈希分布或Redis Cluster

Key哈希分布

Key哈希分布

Redis Cluster

开发语言

C

C

GO

C

多线程

事务

Redis Sentinel模式单Redis组下支持

不支持

不支持

不支持

BLPOP/BRPOP/BLPOPRPUSH

支持

不支持

不支持

支持

Pub/Sub

支持

不支持

不支持

支持

Script

支持load

不支持

不支持

不支持

Scan

支持

不支持

不支持

不支持

Select DB

支持

不支持

支持

Redis Cluster只有一个DB

Auth

支持定义多个密码,给予不同读写及管理权限和Key访问空间

不支持

同redis

不支持

读从节点

支持,可定义丰富规则读指定的从节点

不支持

支持,简单规则

支持,简单规则

多机房支持

支持,可定义丰富规则调度流量

不支持

有限支持

有限支持

统计信息

丰富

丰富

丰富

简单

简单来说,predixy既支持Redis Sentinel也支持Redis Cluster

  • 后端为Redis Sentinel监控的一组Redis,功能完全等同于原始Redis
  • 后端为Redis Sentinel监控的多组Redis,则有部分功能受限
  • 后端为Redis Cluster,功能完全等同于Redis Cluster


欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

代码语言:javascript复制
文章有帮助的话,在看,转发吧。谢谢支持哟 (*^__^*)

0 人点赞