两个或者更多的主服务器. 当其中一部分出现故障时, 剩余的主服务器仍然能正常接受写请求, 来保证服务是可以正常使用的。
SSDB 的主要特点:
支持 zset, map 数据结构, 可替代 Redis
特别适合存储大量集合数据
使用 Google LevelDB 作为存储引擎
支持主从同步, 多主同步
客户端支持 PHP, C++, Python, Lua, Java, Ruby, nodejs, Go 等
内存占用极少
ssdb 项目地址:
https://github.com/ideawu/ssdb
安装及服务配置的方法:
wget –no-check-certificate https://github.com/ideawu/ssdb/archive/master.zipunzip mastercd ssdb-mastermake#optional, install ssdb in /usr/local/ssdbsudo make installstart master./ssdb-server ssdb.confor start as daemon./ssdb-server -d ssdb.confstart slave./ssdb-server ssdb_slave.confssdb command line./tools/ssdb-cli -p 8888stop ssdb-serverkill `cat ./var/ssdb.pid`
需要提前先安装jemalloc内存管理器的,不然无法继续 ~
安装成功,然后跑一下 ~
果然是大量兼容redis的 ~
ssdb也可以用redis里面比较常用的hash。
#xiaorui.cc[root@65 ~]# ssdb-clissdb (cli) – ssdb command line tool.Copyright (c) 2012-2013 ideawu.com’h’ or ‘help’ for help, ‘q’ to quit.ssdb 127.0.0.1:8888> hset a one 1ok(0.000 sec)ssdb 127.0.0.1:8888> hset a two 2ok(0.000 sec)ssdb 127.0.0.1:8888> hset a three 3ok(0.000 sec)ssdb 127.0.0.1:8888> hscan a “” “” 10keyvalue————————- one: 1 three: 3 two: 23 result(s) (0.000 sec)hai
根据结果来排序的存储类型 zset !
ssdb 127.0.0.1:8888>ssdb 127.0.0.1:8888>ssdb 127.0.0.1:8888>ssdb 127.0.0.1:8888>ssdb 127.0.0.1:8888> zsize b0(0.000 sec)ssdb 127.0.0.1:8888> zset b b1 1ok(0.000 sec)ssdb 127.0.0.1:8888> zset b b2 2ok(0.000 sec)ssdb 127.0.0.1:8888> zset b b3 33ok(0.000 sec)ssdb 127.0.0.1:8888> zset b b4 8888ok(0.000 sec)ssdb 127.0.0.1:8888> zscan b “” “” 10error: client_error(0.000 sec)ssdb 127.0.0.1:8888> zscan b “” “” “” 10keyscore————————- b1: 1 b2: 2 b3: 33 b4: 88884 result(s) (0.000 sec)ssdb 127.0.0.1:8888>ssdb 127.0.0.1:8888> zsize b4(0.000 sec)ssdb 127.0.0.1:8888> zsize b4(0.000 sec)ssdb 127.0.0.1:8888> zscan b “” “” “” 10keyscore————————- b1: 1 b2: 2 b3: 33 b4: 88884 result(s) (0.000 sec)ssdb 127.0.0.1:8888> zclear b4(0.000 sec)ssdb 127.0.0.1:8888> zscan b “” “” “” 10keyscore————————-0 result(s) (0.000 sec)ssdb 127.0.0.1:8888>
新版的ssdb也出来个ttl的东西,来控制kv的生效时间,很赞 ~
ssdb 127.0.0.1:8888> setx yoururl xiaorui.cc 10ok(0.000 sec)ssdb 127.0.0.1:8888> get yoururlxiaorui.cc(0.000 sec)ssdb 127.0.0.1:8888> get yoururlxiaorui.cc(0.000 sec)ssdb 127.0.0.1:8888> get yoururlxiaorui.cc(0.000 sec)ssdb 127.0.0.1:8888> get yoururlxiaorui.cc(0.000 sec)ssdb 127.0.0.1:8888> get yoururlnot_found(0.000 sec)ssdb 127.0.0.1:8888> get yoururlnot_found
为了方便操作ssdb服务可以写成一个启动关闭脚本。
# /bin/sh## chkconfig:345 98 98# description: SSDB is a fast NoSQL database for storing big list of billions of elements# processname:ssdbcase “$1” in ‘start’)/usr/local/ssdb/ssdb-server -d /usr/local/ssdb/ssdb.confecho “ssdb started.”;; ‘stop’)kill `cat /usr/local/ssdb/var/ssdb.pid`echo “ssdb stopped.”;; ‘restart’)kill `cat /usr/local/ssdb/var/ssdb.pid`echo “ssdb stopped.”sleep 0.5/usr/local/ssdb/ssdb-server -d /usr/local/ssdb/ssdb.confecho “ssdb started.”;; *)echo “Usage: $0 {start|stop|restart}”exit 1 ;;esacexit 0
直接来个redis和ssdb的命令对比 !
Redis SSDBkv get getset setdel delincr/incrBy incrdecr/decrBy decrgetMultiple multi_getsetMultiple multi_setdel(multiple) multi_delkeys scan(for kv type only)hashmap hget hgethset hsethdel hdelhIncrBy hincrhDecrBy hdecrhKeys hkeyshVals hscanhMGet multi_hget(in schedule)hMSet multi_hset(in schedule)hLen hsize(in schedule)zset zScore zgetzAdd zsetzRem zdelzRange zRangeByScore zscanzIncrBy zincrzDecrBy zdecrzCount zCard zsize(in schedule)
我们项目有很多是python写的,看了下支持的语言接口,ssdb也是支持python的,我这边就简单跑下例子 ~ 果然和redis很相像的哈!
只有经历过地狱般的折磨,才有征服天堂的力量,只有流过血的手指,才能弹出世间的绝唱。