来自:www.cnblogs.com/Courage129/p/14351545.html
如果没有反向代理,一台Redis可能需要跟很多个客户端连接:看着是不是很慌?看没关系,主要是连接需要消耗线程资源,没有代理的话,Redis要将很大一部分的资源用在与客户端建立连接上,redis的高可用和可扩展无论是自带的Redis Sentinel还是Redis Cluster都要求客户端进行额外的支持,而目前基本上没有合适的客户端能够做这些事情,客户端来做这些事情也并不合适,它会让维护变得特别困难。因此在客户端和redis服务端之间加一层代理成了一种理想的方案,代理屏蔽后端Redis实现细节向客户端提供redis服务,可以完美的解决Redis的高可用和扩展性问题,同时代理的引入也使得Redis维护变得更加简单。如何使用代理?
很简单,将请求连接到调度代理器上,由Proxy负责将请求转发到后面的Redis服务实例,图示:所以Proxy又需要做集群,甚至前面可以加一层负载均衡,负载均衡嘛,单机也存在单点故障等问题,一个Director肯定不行,搞不好又挂了,所以整一个主备,备机通过KeepAlived来检测主LVS健康状况,出了问题顶上去。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