
memcache、redis原理对比
一、问题:
表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。
二、解决方案:
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的缓存服务。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shouji/article-69858-1.html
给你点个赞