A Redis cluster proxy.
Requirements:
- UNIX-like system with
SO_REUSEPORT | SO_REUSEADDR
support epoll
support- pthread
- C++ compiler & lib with C++11 features, like g++ 4.8 or clang++ 3.2 (NOTE: install clang++ 3.2 on CentOS 6.5 won't compile because clang uses header files from gcc, which is version 4.4 without C++11 support)
- Google Test (for test)
To build, just
make
turn on all debug logs
make MODE=debug
or compile with g艹
make COMPILER=g++
To link libstdc++ statically, use
make STATIC_LINK=1
to run test (just cover message parsing parts)
make runtest
run test with valgrind checking
make runtest CHECK_MEM=1
cerberus CONFIG_FILE [ARGS]
The first argument is path of a configuration file, then optional arguments. Those specifies
- bind /
-b
: (integer) local port to listen; could also specified - node /
-n
: (address, optional) one of active node in a cluster; format should be host:port; could also set after cerberus launched, via theSETREMOTES
command, see it below - thread /
-t
: (integer) number of threads - read-slave /
r
: (optional, default off) set to "1" to turn on read slave mode. A proxy in read-slave mode won't support writing commands likeSET
,INCR
,PUBLISH
, and it would select slave nodes for reading commands if possible. For more information please read here (CN).
The option set via ARGS would override it in the configuration file. For example
cerberus example.conf -t 8
set the program to 8 threads.
MGET
: execute multipleGET
sMSET
: execute multipleSET
sDEL
: execute multipleDEL
sRENAME
: if source and destination are not in the same slot, execute aGET
-SET
-DEL
sequence without atomicityBLPOP
/BRPOP
: one list limited; might return nil value before timeout See detail (CN)
PROXY
/INFO
: show proxy information, including threads count, clients counts, commands statistics, and remote redis serversKEYSINSLOT slot count
: list keys in a specified slot, same asCLUSTER GETKEYSINSLOT slot count
UPDATESLOTMAP
: notify each thread to update slot map after the next operationSETREMOTES host port host port ...
: reset redis server addresses to arguments, and update slot map after that
- keys:
KEYS
,MIGRATE
,MOVE
,OBJECT
,RANDOMKEY
,RENAMENX
,SCAN
,BITOP
, - list:
BRPOPLPUSH
,RPOPLPUSH
, - set:
SINTERSTORE
,SDIFFSTORE
,SINTER
,SMOVE
,SUNIONSTORE
, - sorted set:
ZINTERSTORE
,ZUNIONSTORE
, - pub/sub:
PUBSUB
,PUNSUBSCRIBE
,UNSUBSCRIBE
,
others: PFADD
, PFCOUNT
, PFMERGE
,
EVAL
, EVALSHA
, SCRIPT
,
WATCH
, UNWATCH
, EXEC
, DISCARD
, MULTI
,
SELECT
, QUIT
, ECHO
, AUTH
,
CLUSTER
, BGREWRITEAOF
, BGSAVE
, CLIENT
, COMMAND
, CONFIG
,
DBSIZE
, DEBUG
, FLUSHALL
, FLUSHDB
, LASTSAVE
, MONITOR
,
ROLE
, SAVE
, SHUTDOWN
, SLAVEOF
, SLOWLOG
, SYNC
, TIME
,
For more information please read here (CN).