Subscribe Free

Join 2670+ others. No spamming.
I promise!

We are currently under high development. Follow us at github.


Looking for Python Tutorials?
Check these awesome tutorials



wandoulabs/codis

READ ME

Codis - yet another fast distributed solution for Redis

Gitter Build Status

Codis is a proxy based high performance Redis cluster solution written in Go/C, an alternative to Twemproxy. It supports multiple stateless proxy with multiple redis instances and is engineered to elastically scale, Easily add or remove redis or proxy instances on-demand/dynamicly.

Codis is production-ready and widely used at wandoujia.com and many companies. You can see Codis Releases for latest and most stable realeases.

Major Changes in 2.0

In Codis 2.0, we:

  • Redesign the request dispatcher, now pipeline and mget/mset requests are much faster than ever!
  • Codis-server (forked redis) is upgrated to 2.8.21. It brings bugfix from upstream redis and also has optimizations, for example, lower memory consumption and faster migration.
  • Optimize the zk connection, it is more stable now.
  • Migration (and auto-rebalance) tasks are saved on zk, it will be continued automatically when the dashboard is restarted.
  • Support Redis AUTH command.
  • More configuration options, see config.ini

Features

  • Proxy based
  • Add/remove redis or proxy dynamically without restarting client, safe and transparent data migration
  • Support both redis or redis-protocol databases
  • GUI dashboard & admin tools
  • Supports most of Redis commands, Fully compatible with Twemproxy(https://github.com/twitter/twemproxy)
  • Native Redis clients are supported

Tutorial

简体中文 English

FAQ

简体中文 English (WIP)

High Availability

简体中文 English

Architecture

architecture

Snapshots

Dashboard main

Migrate migrate

Slots slots

Performance (Benchmark)

Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz x 1 + 16G RAM

  • Archlinux: 4.0.5-1-ARCH #1 SMP PREEMPT Sat Jun 6 18:37:49 CEST 2015 x86_64 GNU/Linux

  • Go: go version go1.4.2 linux/amd64

  • Redis x 4:

  for i in {6380..6383}; do
    nohup codis-server ${i}.conf &
  done
  • Twemproxy - 1CPU:
    • nutcracker -c nutcracker.yml
alpha:
  listen: 127.0.0.1:22120
  hash: crc32a
  hash_tag: "{}"
  distribution: ketama
  auto_eject_hosts: false
  timeout: 400
  redis: true
  servers:
   - 127.0.0.1:6380:1
   - 127.0.0.1:6381:1
   - 127.0.0.1:6382:1
   - 127.0.0.1:6383:1
  • Codis - 4CPU:
codis-proxy --cpu=4 -c config.ini -L proxy.log \
  --addr=0.0.0.0:19000 --http-addr=0.0.0.0:10000 &
  • RedisBenchmark - 1CPU:
for clients in {1,2,4,8,16,32,64,100,200,300,500,800}; do
  redis-benchmark -p $target -c $clients -n 5000000 -P 100 \
    -r 1048576 -d 256 -t get,set,mset
done
  • Benchmark Results:

main

Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz x 2 + 64G RAM

  • CentOS: 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

  • Go: go version go1.3.3 linux/amd64

  • Redis x 8:

  for i in {6380..6387}; do
    nohup codis-server ${i}.conf &
  done
  • Twemproxy - 1CPU:
    • nutcracker -c nutcracker.yml
alpha:
  listen: 127.0.0.1:22120
  hash: crc32a
  hash_tag: "{}"
  distribution: ketama
  auto_eject_hosts: false
  timeout: 400
  redis: true
  servers:
   - 127.0.0.1:6380:1
   - 127.0.0.1:6381:1
   - 127.0.0.1:6382:1
   - 127.0.0.1:6383:1
   - 127.0.0.1:6384:1
   - 127.0.0.1:6385:1
   - 127.0.0.1:6386:1
   - 127.0.0.1:6387:1
  • Codis - 4CPU or 8CPU:
codis-proxy --cpu=4 -c config.ini -L proxy.log \
  --addr=0.0.0.0:19000 --http-addr=0.0.0.0:10000 &
codis-proxy --cpu=8 -c config.ini -L proxy.log \
  --addr=0.0.0.0:19000 --http-addr=0.0.0.0:10000 &
  • RedisBenchmark - 1CPU:
for clients in {1,2,4,8,16,32,64,100,200,300,500,800}; do
  redis-benchmark -p $target -c $clients -n 5000000 -P 100 \
    -r 1048576 -d 256 -t get,set,mset
done
  • MemtierBenchmark - 4CPU:
for i in {1,2,4,8,16,32,64,100,200,300,500,800}; do
  nthread=4
  if [ $i -lt 4 ]; then
    nthread=1
  fi
  let nclient="$i/$nthread"
  memtier_benchmark -p $target -t $nthread -c $nclient \
    --ratio=1:1 --test-time 30 -d 256 --key-pattern=S:S --pipeline=100
done
  • Benchmark Results:

main

Authors

Thanks:

License

Codis is licensed under MIT, see MIT-LICENSE.txt


You are welcome to use Codis in your product, and feel free to let us know~ :)