1 Star 0 Fork 0

listao / predixy

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause

Predixy

Predixy 是一款高性能全特征redis代理,支持redis-sentinel和redis-cluster

特性

  • 高性能并轻量级
  • 支持多线程
  • 多平台支持:Linux、OSX、BSD、Windows(Cygwin)
  • 支持Redis Sentinel,可配置一组或者多组redis
  • 支持Redis Cluster
  • 支持redis阻塞型命令,包括blpop、brpop、brpoplpush
  • 支持scan命令,无论是单个redis还是多个redis实例都支持
  • 多key命令支持: mset/msetnx/mget/del/unlink/touch/exists
  • 支持redis的多数据库,即可以使用select命令
  • 支持事务,当前仅限于Redis Sentinel下单一redis组可用
  • 支持脚本,包括命令:script load、eval、evalsha
  • 支持发布订阅机制,也即Pub/Sub系列命令
  • 多数据中心支持,读写分离支持
  • 扩展的AUTH命令,强大的读、写、管理权限控制机制,健空间限制机制
  • 日志可按级别采样输出,异步日志记录避免线程被io阻塞
  • 日志文件可以按时间、大小自动切分
  • 丰富的统计信息,包括CPU、内存、请求、响应等信息
  • 延迟监控信息,可以看到整体延迟,分后端redis实例延迟

编译

Predixy可以在所有主流平台下编译,推荐在linux下使用,需要支持C++11的编译器。

编译非常简单,下载或者git clone代码后进到predixy目录,直接执行:

$ make

编译后会在src目录生成一个可执行文件predixy

编译debug版本:

$ make debug

更多编译选项:

  • CXX=c++compiler,指定c++编译器,缺省是g++,可以指定为其它,例如:CXX=clang++
  • EV=epoll|poll|kqueue,指定异步io模型,缺省情况下是根据平台来检测
  • MT=false, 关闭多线程支持
  • TS=true, 开启函数调用耗时分析,该选项仅用于开发模式

一些使用参数编译的例子:

$ make CXX=clang++
$ make EV=poll
$ make MT=false
$ make debug MT=false TS=true

安装

简单的只要拷贝src/predixy到目标路径即可

$ cp src/predixy /path/to/bin

配置 详细文档

predixy的配置类似redis, 具体配置项的含义在配置文件里有详细解释,请参考下列配置文件:

  • predixy.conf,整体配置文件,会引用下面的配置文件
  • cluster.conf,用于Redis Cluster时,配置后端redis信息
  • sentinel.conf,用于Redis Sentinel时,配置后端redis信息
  • auth.conf,访问权限控制配置,可以定义多个验证密码,可每个密码指定读、写、管理权限,以及定义可访问的健空间
  • dc.conf,多数据中心支持,可以定义读写分离规则,读流量权重分配
  • latency.conf, 延迟监控规则定义,可以指定需要监控的命令以及延时时间间隔

提供这么多配置文件实际上是按功能分开了,所有配置都可以写到一个文件里,也可以写到多个文件里然后在主配置文件里引用进来。

运行

$ src/predixy conf/predixy.conf

使用默认的配置文件predixy.conf, predixy将监听地址0.0.0.0:7617,后端的redis是Redis Cluster 127.0.0.1:6379。通常,127.0.0.1:6379并不是运行在Redis Clusterr模式下,因此Predixy将会有大量的错误日志输出。不过你依然可以用redis-cli连接predixy来试用一下:

$ redis-cli -p 7617 info

执行上条命令后可以看到predixy自身的一些信息,如果127.0.0.1:6379在运行的话,你可以试试其它redis命令,看看效果如何。

更多的启动命令行参数请看帮助:

$ src/predixy -h

统计信息

和redis一样,predixy用INFO命令来给出统计信息。

在redis-cli连接下执行下面的命令:

redis> INFO

你将看到类似redis执行INFO命令的输出,不过这里是predixy的统计信息。

特别提一下predixy里面的延迟监控信息,可以通过在配置里定义的延迟监控名来看延迟信息

redis> INFO Latency <latency-name>

下面是一个延迟信息输出的例子:

LatencyMonitorName:all
            latency(us)   sum(us)           counts
<=          100              3769836            91339 91.34%
<=          200               777185             5900 97.24%
<=          300               287565             1181 98.42%
<=          400               185891              537 98.96%
<=          500               132773              299 99.26%
<=          600                85050              156 99.41%
<=          700                85455              133 99.54%
<=          800                40088               54 99.60%
<=         1000                67788               77 99.68%
>          1000               601012              325 100.00%
T            60              6032643           100001
The last line is total summary, 60 is average latency(us)

还可以单独看某个redis后端的延迟信息:

redis> INFO ServerLatency <server-address> [latency-name]

要重置所有的统计信息,和redis执行的命令是一样的,不过predixy要求有管理权限才可以重置统计信息

redis> CONFIG ResetStat

性能评测

predixy很快,有多快?对比几个流行的redis代理(twemproxy,codis,redis-cerberus), predixy要比它们快得多。

具体比较参见Wiki benchmark

许可

Copyright (C) 2017 Joyield, Inc. <joyield.com#gmail.com>

All rights reserved.

License under BSD 3-clause "New" or "Revised" License

微信:cppfan 微信

BSD 3-Clause License Copyright (c) 2017, Joyield, Inc. <joyield.com@gmail.com> All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

distributed_redis proxy 展开 收起
C++ 等 4 种语言
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/listao/predixy.git
git@gitee.com:listao/predixy.git
listao
predixy
predixy
master

搜索帮助