`

KeyValue DB之redis

阅读更多
<p><span class="hilite1"><span style="color: #006699;">redis</span>
</span>
,是快客王在je chat中介绍过的一个keyvalue数据库,打着在'入门级服务器'上10w/s set ops高性能头衔来忽悠众多不明真相的程序猿。 <br><br>
事实上,号称的'入门级服务器'服务器是一台 Xeon X3320 2.5Ghz 的机器,在我的 <br><br>
AMD Athlon(tm) 64 X2 Dual Core Processor 4000+ 台式机上,benchmark结果是</p>
<div class="quote_title">引用</div>
<div class="quote_div">====== SET ====== <br>
100005 requests completed in 2.73 seconds <br>
50 parallel clients <br>
3 bytes payload <br>
keep alive: 1 <br><br>
12.12% &lt;= 0 milliseconds <br>
93.68% &lt;= 1 milliseconds <br>
99.61% &lt;= 2 milliseconds <br>
99.93% &lt;= 3 milliseconds <br>
99.95% &lt;= 4 milliseconds <br>
99.96% &lt;= 5 milliseconds <br>
99.99% &lt;= 6 milliseconds <br>
100.00% &lt;= 7 milliseconds <br>
100.00% &lt;= 202 milliseconds <br>
36685.62 requests per second</div>
<p><br><br>
在一台更为牛X的 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz 8核机上</p>
<div class="quote_title">引用</div>
<div class="quote_div">====== SET ====== <br>
100004 requests completed in 1.16 seconds <br>
50 parallel clients <br>
3 bytes payload <br>
keep alive: 1 <br><br>
59.77% &lt;= 0 milliseconds <br>
100.00% &lt;= 1 milliseconds <br>
100.00% &lt;= 201 milliseconds <br>
85987.96 requests per second <br>
</div>
<p><br><br>
这玩意目前只能用一个核,所以CPU频率和缓存就成了速度的关键。 <br><br>
好吧,就DB来说,似乎这个成绩已经很惊人
了,且不说memcachedb和tokyocabinet之流,就说原版的memcached,速度似乎也只能达到这个级别。可是经过进一步的发现,这
玩意根本是使用内存存储,持久化的关键是这三条指令:SAVE BGSAVE LASTSAVE … <br><br>
当接收到SAVE指令的时候,这玩意就会dump数据到一个文件里面。。。 <br><br>
当揭发了<span class="hilite1">redis</span>
的真面目之后,值得一说的是它的独家功能:存储列表和集合,这是它与mc之流相比更有竞争力的地方。 <br>
不介绍mc里面已经有的东东,只列出特殊的: <br><br>
TYPE key — 用来获取某key的类型 <br>
KEYS pattern — 匹配所有符合模式的key,太厉害了,比如KEYS * 就列出所有的key了,当然,复杂度O(n) <br>
RANDOMKEY - 返回随机的一个key <br>
RENAME oldkey newkey — key也可以改名 <br><br>
列表操作,这里才是精华阿 <br>
RPUSH key string — 将某个值加入到一个key列表头部 <br>
LPUSH key string — 将某个值加入到一个key列表末尾 <br>
LLEN key — 列表长度 <br>
LRANGE key start end — 返回列表中某个范围的值,相当于mysql里面的分页查询那样 <br>
LTRIM key start end — 只保留列表中某个范围的值 <br>
LINDEX key index — 获取列表中特定索引号的值,要注意是O(n)复杂度 <br>
LSET key index value — 设置列表中某个位置的值 <br>
LPOP key <br>
RPOP key — 和上面的LPOP一样,就是类似栈或队列的那种取头取尾指令,可以当成消息队列来使用了 <br><br>
集合操作,也一样精彩 <br>
SADD key member — 增加元素 <br>
SREM key member — 删除元素 <br>
SCARD key — 返回集合大小 <br>
SISMEMBER key member — 判断某个值是否在集合中 <br>
SINTER key1 key2 ... keyN — 获取多个集合的交集元素 <br>
SMEMBERS key — 列出集合的所有元素 <br><br>
还有Multiple DB的命令,可以更换db,也是比较有意思,数据可以隔离开,默认是存放在DB 0 <br><br>
好了,命令都列出来了,有什么用呢?官方做了一个更加山寨的twitter克隆版,retwis,代码使用PHP开发,主要看retwis.php就可以了。下面结合下je的山寨chat来说明这东东是怎样用<span class="hilite1">redis</span>
的。 <br><br>
首先是全站闲聊: <br>
http://app.javaeye.com/chat/all <br>
有一个"global:timeline"列表,里面存放所有的口水,然后通过LRANGE取头50个,返回显示。 <br><br>
想看看肉饼最近说啥了,http://robbin.javaeye.com/blog/chat,构造一个key "uid:$userid:posts",比如 'uid:robbinfan:posts',同理LRANGE取列表。 <br><br>
有多少人订阅了肉饼饭呢? http://robbin.javaeye.com/blog/subscriptions <br>
SCARD
一下 "uid:robbinfan:followers",同理肉饼饭的订阅数
"uid:robbinfan:following"。要获取全部的列表,那就 SMEMBERS "uid:robbinfan:followers"
好了,然后加载每个订阅者的信息:GET "uid:quakewang:username"。 <br><br>
随着水王的诞生,居然在一个集合里面保存了上万的口水(比如global:timeline)。如果只需要保存最新的记录,可以LTRIM一下,整个世界就清静了。 <br><br><span class="hilite1">redis</span>

出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了
Python,Ruby,Erlang,PHP客户端,使用很方便。问题是这东东还很新,目前是beta-6版本,可能还不足够稳定。此外,缺乏mc中批
量get也是比较大的问题,始终批量获取跟多次获取的网络开销是不一样的。</p>
分享到:
评论

相关推荐

    30道Redis面试题.docx

    因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB...

    redis阿里大厂面试专题

    因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value DB。 Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构,此外单个 value 的最大限 ...

    Redis面试题.pdf

    由于是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB。 Redis还提供了数据的备份,即master-slave模式的数据备份,以及支持数据的持久化,可以将内存的数

    Redis常见面试题汇总.pdf

    的Key-Value DB。Redis的出色之 处不仅仅是性能,Redis最大的魅力是支持保存多种数据 结构,此外单个value的最大限制是1GB,不像memcached只能保存1 MB的数据,因此 Redis可以用来实现很多有用的功能,比方说用他的...

    46道史上最全Redis面试题

    因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的Key-Value DB。 Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构,此外单个 value 的最大限制...

    狂神说Redis笔记.pdf

    Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。 NoSql(Not Only SQL),不...

    C#操作Redis明细内容 C#调用redis c#使用redis业务 C# Redis操作类 C#中Redis封装的类 C#

    是一个key-value存储系统 2)高性能、可靠性 Redis将数据存储在内存中,读写性能高;Redis提供了 RDB和AOF持久化,可将内存数据存盘,避免断电数据丢失 3)支持多种数据类型,常见的如 string、list、hash、set、...

    Redis的持久化存储redis-storage.zip

    ds_mset key value age 20 ds_mget key age ds_del key age rl_set name shenzhe //先把数据存到leveldb,再存到redis rl_get name //先尝试从redis取数据,如没取到,再尝试从redis取数据 rl_del name //先从...

    Redis的Python模块Redislite.zip

    redislite 是一个 Redis 的 Python 模块,用于在 Python 代码中对 Redis 数据进行...&gt;&gt;&gt; redis_connection.set('key', 'value') True &gt;&gt;&gt; redis_connection.get('key') 'value' 标签:Redislite redis

    Redis的.net客户端StackExchange.Redis.zip

    StackExchange.Redis,这是redis 的.net客户端之一。Redis是一个开源的内存数据存储,可以用来做数据库,缓存或者消息代理服务。目前有不少人在使用 ServiceStack.Redis这个.net客户端,但是这个的最新版本目前已经变成...

    Redis-begin.zip_Redis java_adodb REDIS_java redis_redis_site:www

    在很多时候,人们只是将Redis视为Key/Value数据库服务器,然而事实并非如此,在目前的版本中,Redis除了Key/Value之外还支持List、Hash、Set和Ordered Set等数据结构,因此它的用途也更为宽泛。对于此种误解,Redis...

    redis windows(含32/64位 )v2.4.5官方版.zip

    redis windows支持32bit和64bit,自己实际情况选择,都是windows环境的,Redis是一个key-value存储系统。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充...

    redis内存数据库2.4.1

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

    Redis学习手册

    在目前的版本中,Redis 除了Key/Value 之外还支持 List、Hash、Set 和Ordered Set 等数据结构,因 此它的用途也更为宽泛。对于此种误解,Redis 官网也进行了相应的澄清。和以上两种产品不同的是,Redis 的 License ...

    Redis面试题整理

    因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value DB。 Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构,此外单个 value 的最大 ...

    最新版Redis面试题汇总(含参考答案)

    与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度⾮常快,因此 redis 被⼴泛应⽤于缓存⽅向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。另外,Redis 也经常⽤来做分布式锁。...

    redis非关系型数据库

    1 是一个高性能的(key/value)分布式内存数据库; 2 是一个NoSql数据库,基于内存运行也支持持久化; 3 Redis的持久化方案有两种:RDB和AOF; RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的...

    Redis、Memcache、MongoDB区别

    2、对这三者有比较详细的应用场景告之,并描述出了三者之间区别 3、提供JAVA连接Redis常见问题的解决方案 4、对MongoDB的特性有专门文档作描述 5、对于新手而言,提供了Redis常用命令进行归纳,并用TXT文档整理出来...

    CIRedis:CodeIgniter框架的连接操作Redis的扩展库

    CodeIgniter框架连接操作Redis的扩展库。直接使用Redis方法将文件覆盖到CodeIgniter框架的... //获得key的值,赋值给$value变量使用Redis实例的 colse() 方法或redisdb库的 close() 方法关闭连接。$r-&gt;close();

    redis缓存实例

    Spring集成Jedis缓存数据库及jedisUtils工具类,带有windows客户端工具+linux部署,可视化key-value缓存数据库(入门特别合适)

Global site tag (gtag.js) - Google Analytics