点击关注公众号,Java干货及时送达![ff1e4b5ed3700f8045821ad508dce857.png](https://img8.php1.cn/3cdc5/154fe/c5a/2df82b57f80ec6c0.png)
作者:等不到的口琴
链接:www.cnblogs.com/Courage129/p/14351545.html
如果没有反向代理,一台Redis可能需要跟很多个客户端连接:
![074b95974be9c562b5d1c4d537a62756.png](https://img8.php1.cn/3cdc5/154fe/c5a/18b6fd5e80e3d4c9.png)
看着是不是很慌?看没关系,主要是连接需要消耗线程资源,没有代理的话,Redis要将很大一部分的资源用在与客户端建立连接上,redis的高可用和可扩展无论是自带的Redis Sentinel还是Redis Cluster都要求客户端进行额外的支持,而目前基本上没有合适的客户端能够做这些事情,客户端来做这些事情也并不合适,它会让维护变得特别困难。
因此在客户端和redis服务端之间加一层代理成了一种理想的方案,代理屏蔽后端Redis实现细节向客户端提供redis服务,可以完美的解决Redis的高可用和扩展性问题,同时代理的引入也使得Redis维护变得更加简单。
于是乎,有了代理:
如何使用代理?
很简单,将请求连接到调度代理器上,由Proxy负责将请求转发到后面的Redis服务实例,图示:
![0002f5069cba127a199998b3f400fb4b.png](https://img8.php1.cn/3cdc5/154fe/c5a/a88e8269a11c74e2.png)
又有了新的问题,Proxy挂了可咋整?
想成为架构师,这份架构师图谱建议看看,少走弯路。
所以Proxy又需要做集群,甚至前面可以加一层负载均衡,负载均衡嘛,单机也存在单点故障等问题,一个Director肯定不行,搞不好又挂了,所以整一个主备,备机通过KeepAlived来检测主LVS健康状况,出了问题顶上去。
![4a38cebb781d126bf346eb991d3420a8.png](https://img8.php1.cn/3cdc5/154fe/c5a/f8d8c9d115ca6f12.png)
Redis代理插件
Redis代理插件有很多,这儿简单介绍几款
predixy | 高性能全特征redis代理,支持Redis Sentinel和Redis Cluster |
---|
twemproxy | 快速、轻量级memcached和redis代理 |
codis | redis集群代理解决方案 |
redis-cerberus | Redis Cluster代理 |
代理详细功能对比
特性 | 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
![d997551bce2273dac00e45000c1c62bc.gif](https://img8.php1.cn/3cdc5/154fe/c5a/9bab44ba56b0f3de.gif)
![47957dcef8e4b77e42a8605b780d3068.png](https://img8.php1.cn/3cdc5/154fe/c5a/6fa15d656abb85e6.png)
开工大吉!再发 10,000 个红包封面
2021 年发生的 10 件技术大事!!
23 种设计模式实战(很全)
换掉 Log4j2!tinylog 横空出世
再见单身狗!Java 创建对象的 6 种方式
劲爆!Java 协程要来了!
重磅官宣:Redis 对象映射框架来了!!
推荐一款代码神器,代码量至少省一半!
程序员精通各种技术体系,45岁求职难!
Spring Boot 3.0 M1 发布,正式弃用 Java 8
Spring Boot 学习笔记,这个太全了!
关注Java技术栈看更多干货
![2707ead763aafeb582959aef459e71bd.png](https://img8.php1.cn/3cdc5/154fe/c5a/2d8c3be17131c569.jpeg)
![f6a32f4c281dba08885f806659ed296b.gif](https://img8.php1.cn/3cdc5/154fe/c5a/cf6530ae3292d1bc.gif)
获取 Spring Boot 实战笔记!