`
1028826685
  • 浏览: 938657 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

 
阅读更多

摘要: 一、问题:           数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案:      1.通过高速服务器Cache缓存数据库数据      2.内存数据库   (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hiv...

一、问题:
     
    数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。
 
二、解决方案:
     1.通过高速服务器Cache缓存数据库数据
     2.内存数据库
 
  (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台)
三、主流解Cache和数据库对比:

 
     上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据库(MongoDB),内存数据库(Redis),内存Cache(Memcached),我们现在需要的是对大数据表仍保持高效的查询速度,普通关系型数据库是无法满足的。而MongoDB其实只是一种非关系型数据库,其优势在于可以存储海量数据,具备强大的查询功能,因此不宜用于缓存数据的场景。
 
       从以上各数据可知,对于我们产品最可行的技术方案有两种:
         1.Memcached         内存Key-Value Cache
         2.Redis                     内存数据库
 
四、下面重点分析Memcached和Redis两种方案:
 
4.1 Memcached介绍  
 
     Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度,现在已被LiveJournal、hatena、Facebook、Vox、LiveJournal等公司所使用。
 
4.2 Memcached工作方式分析
     
     许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。Memcached是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web等应用的速度、 提高可扩展性。下图展示了memcache与数据库端协同工作情况:
 
     
 
     其中的过程是这样的:
           1.检查用户请求的数据是缓存中是否有存在,如果有存在的话,只需要直接把请求的数据返回,无需查询数据库。
           2.如果请求的数据在缓存中找不到,这时候再去查询数据库。返回请求数据的同时,把数据存储到缓存中一份。
           3.保持缓存的“新鲜性”,每当数据发生变化的时候(比如,数据有被修改,或被删除的情况下),要同步的更新缓存信息,确保用户不会在缓存取到旧的数据。

     Memcached作为高速运行的分布式缓存服务器,具有以下的特点: 
  • 协议简单 
  • 基于libevent的事件处理 
  • 内置内存存储方式
  • memcached不互相通信的分布式
 
4.3 如何实现分布式可拓展性?

     Memcached的分布式不是在服务器端实现的,而是在客户端应用中实现的,即通过内置算法制定目标数据的节点,如下图所示:

 
4.4 Redis 介绍  
 
     Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步,当前Redis的应用已经非常广泛,国内像新浪、淘宝,国外像 Flickr、Github等均在使用Redis的缓存服务。
 
4.5 Redis 工作方式分析
 
     Redis作为一个高性能的key-value数据库具有以下特征: 
    • 多样的数据模型 
    • 持久化 
    • 主从同步  
     Redis支持丰富的数据类型,最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis通常将数据存储于内存中,或被配置为使用虚拟内存。Redis有一个很重要的特点就是它可以实现持久化数据,通过两种方式可以实现数据持久化:使用RDB快照的方式,将内存中的数据不断写入磁盘;或使用类似MySQL的AOF日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。 Redis支持将数据同步到多台从数据库上,这种特性对提高读取性能非常有益。
     

4.6 Redis如何实现分布式可拓展性?
 
2.8以前的版本:与Memcached一致,可以在客户端实现,也可以使用代理,twitter已开发出用于Redis和Memcached的代理Twemproxy 。
3.0以后的版本:相较于Memcached只能采用客户端实现分布式存储,Redis则在服务器端构建分布式存储。Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,各个节点地位一致,具有线性可伸缩的功能。如图给出Redis Cluster的分布式存储架构,其中节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。在数据的放置策略上,Redis Cluster将整个key的数值域分成16384个哈希槽,每个节点上可以存储一个或多个哈希槽,也就是说当前Redis Cluster支持的最大节点数就是16384
 
     
 
五、综合结论
 
   
 应该说Memcached和Redis都能很好的满足解决我们的问题,它们性能都很高,总的来说,可以把Redis理解为是对Memcached的拓展,是更加重量级的实现,提供了更多更强大的功能。具体来说:
 
1.性能上:
     性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比
Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。
 
2.内存空间和数据量大小:
     MemCached可以修改最大内存,采用LRU算法。Redis增加了VM的特性,突破了物理内存的限制。
 
3.操作便利上:
     MemCached数据结构单一,仅用来缓存数据,而Redis支持更加丰富的数据类型,也可以在服务器端直接对数据进行丰富的操作,这样可以减少网络IO次数和数据体积。
 
4.可靠性上:
     MemCached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。Redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价。
 
5.应用场景:
     Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
     Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
 
六、需要慎重考虑的部分
 
1.Memcached单个key-value大小有限,一个value最大只支持1MB,而Redis最大支持512MB
2.Memcached只是个内存缓存,对可靠性无要求;而Redis更倾向于内存数据库,因此对对可靠性方面要求比较高
3.从本质上讲,Memcached只是一个单一key-value内存Cache;而Redis则是一个数据结构内存数据库,支持五种数据类型,因此Redis除单纯缓存作用外,还可以处理一些简单的逻辑运算,Redis不仅可以缓存,而且还可以作为数据库用
4.新版本(3.0)的Redis是指集群分布式,也就是说集群本身均衡客户端请求,各个节点可以交流,可拓展行、可维护性更强大。
 
转载地址:https://yq.aliyun.com/articles/5957?spm=5176.8091938.0.0.e1J5u0
分享到:
评论

相关推荐

    php apache mysql memcache redis mongodb

    【标题】:“php apache mysql memcache redis mongodb”指的是在服务器端构建一套常见的Web开发环境,包括PHP编程语言、Apache HTTP服务器、MySQL数据库管理系统,以及两种内存缓存技术:Memcached和Redis,还有...

    Redis、Memcache、MongoDB区别

    1、里面包含Redis、MongoDB、Memcache相关的学习文档 2、对这三者有比较详细的应用场景告之,并描述出了三者之间区别 3、提供JAVA连接Redis常见问题的解决方案 4、对MongoDB的特性有专门文档作描述 5、对于新手而言...

    MemcacheRedisMongoDB数据缓存系统方案对比与分析.docx

    【标题】:Memcache、Redis和MongoDB数据缓存系统方案对比与分析 【描述】:本文档将对比分析Memcache、Redis和MongoDB在数据缓存系统中的应用,探讨如何针对大规模数据库表数据,提升服务器响应速度。 【标签】:...

    php apache mysql memcache redis mongodb2

    `Redis`是另一个内存数据结构存储系统,与Memcached类似,但它支持更丰富的数据结构,如字符串、哈希、列表、集合和有序集合。Redis不仅可以用作缓存,还可以作为数据库、消息中间件等,提供持久化存储和复制功能,...

    memcache、redis、tair性能对比测试报告

    《memcache、redis、tair性能对比测试报告》详述了在分布缓存技术领域,对这三种主流缓存服务器的性能评估。测试主要目的是在相同功能特性的基础上,对比它们在不同场景下的表现,因此排除了ehcache(组件级缓存)和...

    php5.3.* memcache-mongodb-redis dll扩展

    3. **Redis**:Redis则是一个开源的、基于内存的数据结构存储系统,可以用作数据库、缓存和消息中间件。它的特点是数据操作速度快,支持多种数据结构,如字符串、哈希、列表、集合和有序集合。在PHP中,`redis.dll`...

    memcache redis tair 性能测试报告

    Ehcache由于是组件级别的缓存,不适合作为独立的缓存服务器进行对比,而MongoDB作为面向文档的数据库,其功能和缓存服务不具可比性,因此这两者未纳入此次测试。 【单机环境测试】 在单机环境中,测试了四个关键...

    分布式数据库面试专题系列:Memcached+Redis+MongoDB-06.rar

    例如,Redis的Redis Cluster是如何实现分布式存储的,MongoDB如何进行Sharding,以及Memcached如何与应用程序集成以提高效率。 理解这些数据库的核心概念、操作和最佳实践,对于任何希望在分布式存储和数据库领域...

    memcache、redis、tair性能对比测试报告.docx

    该测试报告主要对比分析了三种流行的分布式缓存系统——memcache、redis和tair在不同条件下的性能表现,以供选择适合特定需求的缓存解决方案。测试场景涵盖了单机环境和分布式环境,关注点在于缓存数据的设置和获取...

    PHP7 NTS X86插件(redis、mongodb、memcached)

    首先,**Redis** 是一个开源的、基于键值对的数据存储系统,常用于数据缓存和快速数据访问。PHP7的Redis扩展允许开发者在PHP代码中直接与Redis服务器交互,进行数据的读写操作,支持事务、发布/订阅、Lua脚本等功能...

    php5.4常用dll文件php_redis、php_memcache、php_mongo

    在标题和描述中提到的"php5.4常用dll文件php_redis、php_memcache、php_mongo"是指PHP 5.4版本中常用的三个动态链接库(DLL)扩展,它们分别对应于Redis、Memcache和MongoDB这三种不同的数据存储解决方案。...

    memcache缓存

    除了Memcache,还有许多类似的缓存系统,如Redis、MongoDB的缓存功能、Varnish等。这些系统各有特点,可以根据具体需求选择适用的技术。例如,Redis支持更丰富的数据结构,适合复杂的数据存储和处理场景。 总的来说...

    PHP4.3 mongo memcache solr redis.dll扩展包.zip 以及配置方法

    Memcache是另一种流行的缓存系统,用于存储和检索数据,以减轻数据库负载。在PHP4.3中,memcache扩展提供了连接到memcached服务器并执行各种操作的接口,如存储和获取键值对,这对于提高网站的响应速度非常有用。 ...

    php扩展(gearman.so , memcached.so ,memcache.so ,mongo.so ,redis.so)

    4. Redis.so:Redis是一个高性能的键值存储系统,常用于数据缓存、会话存储和消息队列等场景。PHP的redis.so扩展提供了与Redis服务器交互的接口,支持命令行操作、事务处理、发布/订阅等功能,使得PHP开发者能够充分...

    NoSQL精粹 NoSQL精粹

    综上所述,这本《NoSQL精粹》书籍不仅对memcache、redis、mongodb进行了深入的讲解和分析,而且从一个更广的角度出发,提供了对NoSQL技术世界的概览,以及如何在实际的软件开发和数据管理项目中应用这些技术的指导。

    php4.3 mongo memcache solr redis.dll扩展包以及配置方法

    最后,Redis是一个高性能的键值数据存储,常用于缓存和快速数据访问。在PHP 4.3中,你需要找到兼容的redis.dll扩展文件,将其添加到PHP的"ext"目录,并在php.ini中启用。然后,你可以使用PHP的Redis类进行连接和操作...

    非关系数据库对比分析

    ### 非关系数据库对比分析 #### 一、性能 三种非关系型数据库—Redis、Memcached 和 MongoDB,在性能方面都有着不错的表现。由于它们都基于内存进行数据处理,因此能够达到较高的事务处理速度(TPS)。总体来看,...

    Redis教程从基础到高级,图形和代码结合,方便理解。

    Redis是一款高性能的键值对数据库,常被用作缓存和数据持久化系统。它不仅支持简单的key-value存储,还提供诸如list、set、hash、zset等多种数据结构,这使得Redis在处理复杂的数据操作上具有优势。 在NoSQL数据库...

    01_redis入门-改.pdf

    Redis是一种高性能的键值对存储系统,被广泛用于各种应用场景,尤其是在处理高并发和大数据量的场景下。本知识点将详细介绍Redis的基本概念、应用场景、数据类型和持久化机制,以及如何下载、安装和操作Redis。 ...

    ThinkPHP文件缓存类

    ThinkPHP支持多种缓存驱动,包括File(文件)、Redis、Memcache、Mongodb等。文件缓存驱动是最基础且易于理解的一种,它依赖于本地文件系统,无需额外安装服务器软件。 **2. 文件缓存类的使用** 在ThinkPHP中,...

Global site tag (gtag.js) - Google Analytics