predixy:一款吊打众对手的redis代理,你喜欢吗?

引言

无论是为了解决redis的高可用问题、还是为了可扩展性、或者是为了维护方便,用一款redis代理都是上佳的选择。在github上有众多开源的redis代理,本文中选取三个流行的,并且各具特色的代理来和本文所要推介的predixy进行对比。

功能

特性predixytwemproxycodisredis-cerberus
高可用Redis Sentinel或Redis Cluster一致性哈希Redis SentinelRedis Cluster
可扩展Key哈希分布或Redis ClusterKey哈希分布Key哈希分布Redis Cluster
开发语言C++CGOC++
多线程
事务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

性能

作为redis代理,性能不行都不好意思说自己是redis代理,上面提到的四款代理必然都是高性能的,但为了分个高低上下,接下来我们就来做个简单的评测,测试平台如下:

名称内容
CPUAMD Ryzen 7 1700X Eight-Core Processor 3.775GHz
内存16GB DDR4 3000
系统x86_64 GNU/Linux 4.10.0-27-generic #30~16.04.2-Ubuntu
predixy版本1.0.1,源码默认参数编译
twemproxy版本0.4.1,源码默认参数编译
codis二进制发布版本codis3.2.0-go1.8.1-linux.tar.gz
cerberusgithub迁出8d68a5d源码默认参数编译

redis-server、各代理、redis-benchmark均在这一台机器上运行。

redis部署:

代理redis后端部署
predixyredis cluster模式部署三个redis主节点, slots平分
twemproxy三个redis主节点,采用crc16哈希,modula分布
codis三个redis主节点,slots平分
cerberusredis cluster模式部署三个redis主节点, slots平分

以下测试的结果中,横坐标为数据大小、纵坐标为qps或者毫秒。

单线程SET/GET测试

测试命令:

$ redis-benchmark -p xxx -t set,get -r 3000 -n 1000000 -d xxx                                                          

测试结果:

image

结果说明:

在吞吐上,predixy大幅领先于另外三款代理,当数据量达到16KB时,由于redis-benchmark本身成为瓶颈,predixy和twemproxy成绩差不多了。在延时上,codis由于语言的问题,一直都大于另外三款代理,后续测试也一样。

单线程PIPELINE SET/GET测试

测试命令:

$ redis-benchmark -p xxx -t set,get -r 3000 -n 5000000 -P 20 -d xxx

测试结果:

image

结果说明:

redis-benchmark一次pipeline 20个命令,瞬间qps猛增,而predixy在这轮测试中一骑绝尘,遥遥领先另外三个,在数据量大于2048之后,redis-benchmark本身成为瓶颈,才使得predixy的get请求qps降下来。另外值得注意的是,在上轮测试中落后的cerberus在本轮测试一开始表现也远好过twemproxy和codis,随着数据量的变大才逐渐掉队。

双线程PIPELINE SET/GET测试

测试命令:

$ redis-benchmark -p xxx -t set,get -r 3000 -n 10000000 -P 20 -d xxx

测试结果:

image

结果说明:

由于twemproxy不支持多线程,因此没有参加本轮测试,为了避免redis-benchmark成为瓶颈,在双线程中,我们没有测试单个的SET/GET,而是直接进行PIPELINE测试,测试结果和单线程的PIPELINE结果一样,predixy依然取得领先,在数据量达到2048后,redis-benchmark对predixy来说已经成为瓶颈。本轮cerberus表现也很抢眼,不过还是随着数据量的增大,表现迅速变差。

结论

同另外三款流行的redis代理相比,predixy在功能上更加全面,在性能上更是完胜,这样的一款redis代理,你喜欢吗?

  • 11
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
是的,作为Java领域的专家,我可以回答这些问题。 1. Redis集群了解吗? Redis集群是一种分布式Redis数据库解决方案,可以通过将多个Redis节点组合成一个逻辑上的整体来实现高可用性和可扩展性。Redis集群使用哈希分片算法将数据分散存储在不同的节点上,从而实现数据的分布式存储和负载均衡。 2. 如何处理宕机的情况? Redis集群使用主从复制机制来保证高可用性,即将一个节点设置为主节点,其他节点设置为从节点。当主节点宕机时,集群会自动选举一个从节点作为新的主节点,从而保证服务的持续可用性。 此外,Redis还提供了哨兵机制,可以监控Redis节点的健康状态,当主节点宕机时,哨兵会自动将其中一个从节点升级为主节点,从而保证服务的高可用性。 3. Redis的同步策略? Redis支持两种同步策略:全量复制和增量复制。 全量复制指的是从节点在开始复制时,需要将主节点上的所有数据全部复制一遍,然后才能进行增量同步。全量复制的缺点是耗时较长,但可以保证数据的一致性。 增量复制则是只复制主节点上的最新数据,从节点会记录自己已经同步的数据偏移量,然后从这个偏移量开始进行增量同步。增量复制的优点是速度快,但可能存在数据不一致的情况。为了解决这个问题,Redis引入了复制偏移量校验机制,可以在从节点和主节点之间进行数据一致性检查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值