Redis 性能比redis vs memcachedd 好吗?有哪些网站采用 Redis

Redis 性能比 Memcached 好吗?有哪些网站采用 Redis_百度知道
Redis 性能比 Memcached 好吗?有哪些网站采用 Redis
新浪就用的redis,只能说Redis功能比 Memcached更加强大,可供使用的场合更多。
知道智能回答机器人
我是知道站内的人工智能,可高效智能地为您解答问题。很高兴为您服务。
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁memcache、redis、tair性能对比测试报告_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
memcache、redis、tair性能对比测试报告
上传于||文档简介
&&原​创​测​试
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
你可能喜欢NoSQL数据库性能比较:MongoDB、Redis、Tokyo Tyrant - msnshow的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园
有正在从事web测试和APP测试工作或想从事此行业的测友们,欢迎与我联系,相互交流!测试交流微信公众号:gh_03e570cb5168
长期招聘不同级别测试工程师(WEB\APP\性能)有意者请与本人联系!
NoSQL数据库性能比较:MongoDB、Redis、Tokyo Tyrant
& 21:56:33
/ 个人分类:
  准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较:  存储实现的比较:  * 内存文件映像(Memory-File Mapping) Redis, MongoDB  * 文件 + Cache Tokyo Tyrant  * 内存: Redis, Tokyo Tyrant  Key/Value索引形式:  * B+ Tree : MongoDB, Tokyo Tyrant  * Hash Table: Redis, Tokyo Tyrant  * Fixed Length: Tokyo Tyrant  从上面的比较可以看出,Redis和MongoDB是基于系统内存映像文件,数据能命中在内存的时候读写操作性能应该是非常强的,当然,反过来,如果数据十分分散不能在内存命中,那么内存页的切换开销将是非常可怕的,MongoDB和Redis数据文件不同的是将数据存放在多个文件中,每当上一个存满的时候就会创建新的数据空间文件。鉴于MongoDB 是主要比较对象,而其采用B+Tree进行存储,故TT也使用B+Tree引擎进行比较。  那么该测试什么自然就可以得知:尽管使用内存映像文件读写操作会很快(快到什么程度),但是当写满内存以后呢?  文件大小限制:  32bit: MongoDB &= 2G  TT no limits if u ./configure --enable-off  64bit: MongoDB和TT均无限制。  注:Redis 总是受限于内存的大小。  为了进行相对公平的测试:  首先通过虚拟机对内存的使用进行同等限制,因为MongoDB和Redi实际上读写都是在内存操作的(利用MemoryMap文件),故当的大小超过内存大小时候的性能尤为重要。故用虚拟机来设置一个较小的内存大小,来快速观察数据库大小超过内存的时候的性能。  这里设置虚拟机内存256M,实际可使用内存200M左右,CPU 2核,Unbuntu
9.10  测试记录:  Key: 512的随机字符串  Value: 大约5k的随机字符串  每项记录数据大小:大约5.5k  计划插入数据100000条:5.5k*M*100=550M 数据量大约 550M。  注:key开始是用1k的随机字符串来测试,但是在测试mongoDB 报告key too large to index, 因此减小key的大小到512字节。  当没有任何数据的时候:  MongoDB的大小:  64M: (db.0, db.1, ..)data FIle  16M: (database.ns) name space index file.  TC的大小:  133K btree.tcb  256 fixed.tcf  517K hash.tch  Redis的大小:  VirtualMemFile: 41M redis-3546.vm  DB: 0M  注:redis的文件初始大小基本等于你设置的内存以及内存页的大小,可以自己调整。redis通过定时存盘的策略进行保存,定时策略可以自行设置。  通常情况下,redis的数据库必须&=内存,如果要让redis的数据库大于内存,那么必须在配置中打开vm_enabled选项(貌似没用,当插入数据超过内存后,会被Unbuntu的后台保护进程给杀掉,如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值)。  key/value 功能:  Redis: 读写key/value,value可以有各种结构,但Value无索引。  MongoDB: 以collection组织,key如果不特别指定将由系统作为ObjectId产生(指定使用“_id”字段),value是结构化的,value里的字段可以被索引。  TokyoTyrant: 读写key/value,table 数据引擎支持结构化的value和字段索引,数据引擎不支持,b+tree可以用key索引。  基准测试机器:  虚拟机是跑在 2 CPU 2.26G Intel Core 2 Duo,内存为2G  虚拟机:  CPU 2核  内存 256M  :Unbuntu Server 9.10 32bit  使用软件版本:  * MongoDB: mongodb-linux-i686-  * TokyoTyrant: TT1.1.40; TC1.4.42  * Redis: (GIT SRC)  启动:  redis-server ./redis.conf(设置了最大内存210兆:maxmemory , vm-enable=yes,vm-max-memory ,vm-pages 1342177)  ./ttserver -port 1974 /data/db/tt.tcb  bin/mongod -port 1974 --dbpath /data/db/mongo  MongoDB  如上所述测试添加10万条数据:  内存,刚开始的时候虚拟内存占用48564,物理内存占用 3432,在插入2000条数据后,虚拟内存到达143M,物理内存33M,内存增长很迅速。最后虚拟内存稳定在1048M,物理内存则在160M-211M徘徊。  CPU占用率最低的时候为6%,最高的时候达到30%,平时在8%-10%之间。  从测试看,每次分配DB空间的时候所有插入操作被冻结,最坏的一次插入2000条耗时1分多(这个时候正好有分配空间文件发生),平时,插入2000条数据大约耗时17-18秒。  最后MongoDB的数据文件总大小达到:977M  接着测试MongoDB读取10万条记录(非命中形式:该key是随机产生的,因此大都不会存在数据库中)  内存:虚拟内存稳定在1048M,物理内存占用在90M-94M。  CPU:最低占用8%,最高到45%;平时在10%-12%左右。  读取2000条记录大约耗时3-4秒,第一次用了6秒。  Redis  同样测试添加10万条数据:  内存,开始的时候忘记看了,大致较开始的虚拟内存占用112M,物理内存82M,在4万条记录的时候VM占用196M,物理内存占用163M,最后的时候VM占用237M,物理内存204M。  CPU:最低占用3%,最高的时候15%,平时在7%-11%之间。  当Redis向磁盘写入数据的时候,有变慢(2000条记录耗时21秒),平时存2000条记录大约耗时18-19秒左右。  不过没有设定maxmemory的时候,在大约写入 6万多个数据后服务器被挂掉。当设置最大使用内存(200M)后,达到内存限制,写入不了(已写入48136个数据),但是不会挂了。  Redis文件在写入48136个数据时候的大小(包括VM文件):277M,其中VM 41M,数据库236M。  接着测试Redis读取10万条记录(非命中形式:该key大都不会存在数据库中)  内存:虚拟内存237M,物理内存占用204M  CPU:在26%-43%  读取2000条记录大约耗时在3-4秒。  Tokyo Tyrant  如上所述测试添加10万条数据:采用默认配置参数运行TT B+Tree  内存:初始的时候VM: 76928 物理内存: 1232,在插入的过程内存的增加很少,在插入到4万条记录的时候虚拟内存仅为99540,物理内存23M,到最后虚拟内存117M,物理内存37M。  CPU占用率始终稳定在2%  在插入到5万条记录前,平均插入2000条耗时约19-20秒,到8万条记录前时候,插入2000条耗时20-22秒,再接下来的2万条,平均插入2000条耗时在慢慢增加并有震荡,28秒,最后到42秒(B+Tree的索引节点在内存中满了?可能需要调整参数?)。  TT的数据库只有一个文件大小为:589M  接着测试TT读取10万条记录(非命中形式:该key大都不会存在数据库中)  内存稳定在:VM110M;物理内存36M。  CPU:最低2%,最高6%,平时在4%  读取2000条记录大约耗时在7-8秒,偶尔6秒或9秒。  小结:  MongoDB和Redis写入数据不是直接写入磁盘,所以当重启系统时候没有存盘的数据将全部丢失。TT实际上也有内存缓冲,不过和前者相比要小的多。  以上测试并不完善,只是一个开始,比如没有测试小数据(以数字作为key,100字节Value),没有测试较大的数据(20K左右);没有测试在命中情况下的性能;没有测试并发读写的性能,据闻MongoDB的并发读写效率不是特别出色,MongoDB的特色在于支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,并实现了存储节点的自动sharding管理等配套功能;以及由于MongoDB是分布在多个文件中,当数据量远大内存,分布在足够多的文件的时候的性能;对开启同步后的Replication测试....对于TT来说,需要对TT的其它数据引擎进行测试,以及TT的各种数据引擎如何优化?TC/TT在mixi的实际应用当中,存储了2000万条以上的数据,同时支撑了上万个并发连接,是一个久经考验的项目。TC在保证了极高的并发读写性能的同时,具有可靠的数据持久化机制,同时还支持类似关系数据库表结构的hashtable以及简单的条件,分页和排序操作,是一个很棒的数据库。TC的主要缺点是在数据量达到上亿级别以后,并发写数据性能会大幅度下降(读不受影响),NoSQL: If Only It Was That Easy提到,他们发现在TC里面插入1.6亿条2-20KB数据的时候,写入性能开始急剧下降。Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,Redis最大的魅力是支持保存List链表和Set集合的数据结构,而且还支持对List进行各种操作,例如从List两端push和pop数据,取 List区间,排序等等,对Set支持各种集合的并集交集操作,此外单个value的最大限制是1GB,不像memcached只能保存1MB的数据,Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一个功能加强版的memcached来用。  测试程序和详细记录见附件:您的位置: >
Memcached真的过时了吗?Redis与Memcached的比较
[导读]这两年Redis火得可以,Redis也常常被当作Memcached的挑战者被提到桌面上来。关于Redis与Memcached的比较更是比比皆是。然而,Redis真的在功能、性能以及内存使用效率上都超越了Memcached吗? 下面内容来自Redis作者在...
这两年Redis火得可以,Redis也常常被当作Memcached的挑战者被提到桌面上来。关于Redis与Memcached的比较更是比比皆是。然而,Redis真的在功能、性能以及内存使用效率上都超越了Memcached吗?
下面内容来自Redis作者在stackoverflow上的一个回答,对应的问题是《》(相比Redis,Memcached真的过时了吗?)
You should not care too much about performances. Redis is faster per core with small values, but memcached is able to use multiple cores with a single executable and TCP port without help from the client. Also memcached is faster with big values in the order of 100k. Redis recently improved a lot about big values (unstable branch) but still memcached is faster in this use case. The point here is: nor one or the other will likely going to be your bottleneck for the query-per-second they can deliver.
没有必要过多的关心性能,因为二者的性能都已经足够高了。由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。(比如瓶颈可能会在网卡)
You should care about memory usage. For simple key-value pairs memcached is more memory efficient. If you use Redis hashes, Redis is more memory efficient. Depends on the use case.
如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。
You should care about persistence and replication, two features only available in Redis. Even if your goal is to build a cache it helps that after an upgrade or a reboot your data are still there.
如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。
You should care about the kind of operations you need. In Redis there are a lot of complex operations, even just considering the caching use case, you often can do a lot more in a single operation, without requiring data to be processed client side (a lot of I/O is sometimes needed). This operations are often as fast as plain GET and SET. So if you don&t need just GEt/SET but more complex things Redis can help a lot (think at timeline caching).
当然,最后还得说到你的具体应用需求。Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果你需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
来源:(其他人的回答同样值得一看)
转载请注明来源:
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系我们,我们会尽快予以更正。
上一篇:下一篇:
了解这些字:
··········
··········
··········
··········

我要回帖

更多关于 redis memcached 比较 的文章

 

随机推荐