Skip to content

为什么predixy?开发一款全新redis代理的考虑

fortrue edited this page Aug 30, 2017 · 1 revision

背景

redis最常见的使用方式有两种,一种是直接使用单个redis、另一种使用redis集群。

redis单例模式

很多业务场景数据量并不大,因此单个redis实例便够用,这种情况要考虑的只是redis的高可用问题,针对redis的高可用问题,redis自身有redis-sentinel的解决方案,然而redis-sentinel要求客户端单独支持才行,于是采用代理对客户端屏蔽后端redis高可用的实现成了一种选择。针对单实例redis的高可用问题可以看看这篇文章《利用redis-sentinel实现redis主从高可用设计方案对比

redis集群模式

在数据量很大或者请求量非常大的情况下,搭建redis集群是必然的选择,在redis 3.0推出以前,由于redis自身没有集群方案,因此集群方案主要是在客户端或代理层面做的,在redis 3.0推出之后,redis自身有了集群解决方案redis cluster。关于redis集群的架构设计可以看这篇文章《构建高可用、可扩展的redis集群》。

现状

针对以上提到的两种最常见的redis使用方式,一个理想的统 一的解决方案就是采用代理,然而目前常见的几个代理却没有一个可以很好的完成上面两个任务

  • twemproxy:差不多可以用于上面两个场景,然而twemproxy不支持的redis功能太多,像列表的阻塞命令、事物、发布订阅等都不支持,而且也没有直接支持redis的高可用
  • codis:主要是针对redis集群使用设计的,
  • corvus:单纯的redis cluster代理
  • redis-cerberus:单纯的redis cluster代理

解决方案

基于上述原因,我们决定打造一款全新的redis代理,于是predixy便诞生了。

predixy完美的实现了对redis单例模式及集群模式的支持,几乎完整的实现了redis原生的所有用于客户端的命令。多key命令、列表阻塞操作、发布订阅、脚本、扫描等高级功能全支持,在使用redis单例模式下也支持事物。

predixy还是提供了丰富的扩展功能:

  • 增强的AUTH命令,提供强大的权限控制能力
  • 详细的统计信息,包括请求、耗时等各种信息
  • 多数据中心支持
  • 读写分离功能

在支持众多redis功能以及提供众多附加功能的同时,predixy依然是高性能的,性能远超上面提到的各代理软件。

了解predixy的更多详细信息,查看predixy在github上的主页:

https://github.com/joyieldInc/predixy