Skip to content
A high performance and fully featured proxy for redis, support redis sentinel and redis cluster
C++ Python Other
Branch: master
Clone or download

Latest commit

Latest commit 393ff81 Feb 1, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
conf support redis standalone backend Jul 8, 2018
doc 1.modify default ServerTimeout and KeepAlive to 0 Mar 28, 2018
src fix private connection leak Jun 15, 2019
test Add support for `zpopmax` and `zpopmin` redis commands (server 5.0.0+) Feb 7, 2019
LICENSE release 1.0.0 Jul 24, 2017
Makefile release 1.0.0 Jul 24, 2017
README.md add wechat contact Mar 26, 2018
README_CN.md add wechat contact Mar 26, 2018
_config.yml Set theme jekyll-theme-cayman Aug 10, 2017

README.md

Predixy 中文版

Predixy is a high performance and fully featured proxy for redis sentinel and redis cluster

Features

  • High performance and lightweight.
  • Multi-threads support.
  • Works on Linux, OSX, BSD, Windows(Cygwin).
  • Supports Redis Sentinel, single/multi redis group[s].
  • Supports Redis Cluster.
  • Supports redis block command, eg:blpop, brpop, brpoplpush.
  • Supports scan command, even multi redis instances.
  • Multi-keys command support: mset/msetnx/mget/del/unlink/touch/exists.
  • Multi-databases support, means redis command select is avaliable.
  • Supports redis transaction, limit in Redis Sentinel single redis group.
  • Supports redis Scripts, script load, eval, evalsha.
  • Supports redis Pub/Sub.
  • Multi-DataCenters support, read from slaves.
  • Extend AUTH, readonly/readwrite/admin permission, keyspace limit.
  • Log level sample, async log record.
  • Log file auto rotate by time and/or file size.
  • Stats info, CPU/Memory/Requests/Responses and so on.
  • Latency monitor.

Build

Predixy can be compiled and used on Linux, OSX, BSD, Windows(Cygwin). Requires C++11 compiler.

It is as simple as:

$ make

To build in debug mode:

$ make debug

Some other build options:

  • CXX=c++compiler, default is g++, you can specify other, eg:CXX=clang++
  • EV=epoll|poll|kqueue, default it is auto detect according by platform.
  • MT=false, disable multi-threads support.
  • TS=true, enable predixy function call time stats, debug only for developer.

For examples:

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

Install

Just copy src/predixy to the install path

$ cp src/predixy /path/to/bin

Configuration

See below files:

  • predixy.conf, basic config, will refrence below config files.
  • cluster.conf, Redis Cluster backend config.
  • sentinel.conf, Redis Sentinel backend config.
  • auth.conf, authority control config.
  • dc.conf, multi-datacenters config.
  • latency.conf, latency monitor config.

Running

$ src/predixy conf/predixy.conf

With default predixy.conf, Predixy will listen at 0.0.0.0:7617 and proxy to Redis Cluster 127.0.0.1:6379. In general, 127.0.0.1:6379 is not running in Redis Cluster mode. So you will look mass log output, but you can still test it with redis-cli.

$ redis-cli -p 7617 info

More command line arguments:

$ src/predixy -h

Stats

Like redis, predixy use INFO command to give stats.

Show predixy running info and latency monitors

redis> INFO

Show latency monitors by latency name

redis> INFO Latency <latency-name>

A latency monitor example:

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)

Show latency monitors by server address and latency name

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

Reset all stats and latency monitors, require admin permission.

redis> CONFIG ResetStat

Benchmark

predixy is fast, how fast? more than twemproxy, codis, redis-cerberus

See wiki benchmark

License

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

All rights reserved.

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

WeChat:cppfan wechat

You can’t perform that action at this time.