分类: LINUX
2010-09-20 09:48:21
redis,是快客王在je chat中介绍过的一个keyvalue数据库,打着在'入门级服务器'上10w/s set ops高性能头衔来忽悠众多不明真相的程序猿。
事实上,号称的'入门级服务器'服务器是一台 Xeon X3320 2.5Ghz 的机器,在我的
AMD Athlon(tm) 64 X2 Dual Core Processor 4000+ 台式机上,benchmark结果是
在一台更为牛X的 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz 8核机上
这玩意目前只能用一个核,所以CPU频率和缓存就成了速度的关键。
好吧,就DB来说,似乎这个成绩已经很惊人
了,且不说memcachedb和tokyocabinet之流,就说原版的memcached,速度似乎也只能达到这个级别。可是经过进一步的发现,这
玩意根本是使用内存存储,持久化的关键是这三条指令:SAVE BGSAVE LASTSAVE …
当接收到SAVE指令的时候,这玩意就会dump数据到一个文件里面。。。
当揭发了redis的真面目之后,值得一说的是它的独家功能:存储列表和集合,这是它与mc之流相比更有竞争力的地方。
不介绍mc里面已经有的东东,只列出特殊的:
TYPE key — 用来获取某key的类型
KEYS pattern — 匹配所有符合模式的key,太淫荡了,比如KEYS * 就列出所有的key了,当然,复杂度O(n)
RANDOMKEY - 返回随机的一个key
RENAME oldkey newkey — key也可以改名
列表操作,这里才是精华阿
RPUSH key string — 将某个值加入到一个key列表头部
LPUSH key string — 将某个值加入到一个key列表末尾
LLEN key — 列表长度
LRANGE key start end — 返回列表中某个范围的值,相当于mysql里面的分页查询那样
LTRIM key start end — 只保留列表中某个范围的值
LINDEX key index — 获取列表中特定索引号的值,要注意是O(n)复杂度
LSET key index value — 设置列表中某个位置的值
LPOP key
RPOP key — 和上面的LPOP一样,就是类似栈或队列的那种取头取尾指令,可以当成消息队列来使用了
集合操作,也一样精彩
SADD key member — 增加元素
SREM key member — 删除元素
SCARD key — 返回集合大小
SISMEMBER key member — 判断某个值是否在集合中
SINTER key1 key2 ... keyN — 获取多个集合的交集元素
SMEMBERS key — 列出集合的所有元素
还有Multiple DB的命令,可以更换db,也是比较有意思,数据可以隔离开,默认是存放在DB 0
好了,命令都列出来了,有什么用呢?官方做了一个更加山寨的twitter克隆版,retwis,代码使用PHP开发,主要看retwis.php就可以了。下面结合下je的山寨chat来说明这东东是怎样用redis的。
首先是全站闲聊:
有一个"global:timeline"列表,里面存放所有的口水,然后通过LRANGE取头50个,返回显示。
想看看肉饼最近说啥了,http://robbin.javaeye.com/blog/chat,构造一个key "uid:$userid:posts",比如 'uid:robbinfan:posts',同理LRANGE取列表。
有多少人订阅了肉饼饭呢? http://robbin.javaeye.com/blog/subscriptions
SCARD
一下 "uid:robbinfan:followers",同理肉饼饭的订阅数
"uid:robbinfan:following"。要获取全部的列表,那就 SMEMBERS "uid:robbinfan:followers"
好了,然后加载每个订阅者的信息:GET "uid:quakewang:username"。
随着水王的诞生,居然在一个集合里面保存了上万的口水(比如global:timeline)。如果只需要保存最新的记录,可以LTRIM一下,整个世界就清静了。
redis的
出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了
Python,Ruby,Erlang,PHP客户端,使用很方便。问题是这东东还很新,目前是beta-6版本,可能还不足够稳定。此外,缺乏mc中批
量get也是比较大的问题,始终批量获取跟多次获取的网络开销是不一样的。
chinaunix网友2010-09-21 10:18:16
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com