Skip to content
/ codis Public
forked from CodisLabs/codis

Proxy based redis cluster powered by go, supporting pipeline

License

MIT, BSD-3-Clause licenses found

Licenses found

MIT
MIT-LICENSE.txt
BSD-3-Clause
vitess_license
Notifications You must be signed in to change notification settings

niugh/codis

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

21ebf0a · Oct 27, 2015
Oct 26, 2015
Oct 27, 2015
Oct 26, 2015
Dec 22, 2014
Oct 14, 2015
Oct 23, 2015
Jul 3, 2015
Jun 3, 2015
Oct 26, 2015
Apr 7, 2015
Nov 8, 2014
Oct 26, 2015
Sep 6, 2015
Oct 23, 2015
May 27, 2015
Oct 27, 2014

Repository files navigation

#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~ :)

About

Proxy based redis cluster powered by go, supporting pipeline

Resources

License

MIT, BSD-3-Clause licenses found

Licenses found

MIT
MIT-LICENSE.txt
BSD-3-Clause
vitess_license

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 77.2%
  • HTML 11.8%
  • JavaScript 8.6%
  • Shell 2.0%
  • Other 0.4%