性能对比:



1、性能



都比较高,性能对我们来说应该都不是瓶颈



总体来讲,TPS方面redis和memcache差不多,要大于mongodb



2、操作的便利性



    数据结构单一



    丰富一些,数据操作方面,redis更好一些,较少的网络IO次数



     支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富



3、内存空间的大小和数据量的大小



     在2.0版本后增加了自己的VM特性,突破物理内存的限制;可以对key value设置过期时间(类似memcache)



     可以修改最大可用内存,采用LRU算法



     适合大数据量的存储,依赖操作系统VM做内存管理,吃内存也比较厉害,服务不要和别的服务在一起



4、可用性(单点问题)



对于单点问题,



           ,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题,



所以单点问题比较复杂;不支持自动sharding,需要依赖程序设定一致hash 机制。



一种替代方案是,不用redis本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现),一致性问题和性能的权衡



           本身没有数据冗余机制,也没必要;对于故障预防,采用依赖成熟的hash或者环状的算法,解决单点故障引起的抖动问题。



           支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制。



5、可靠性(持久化)



对于数据持久化和数据恢复,



       支持(快照、AOF):依赖快照进行持久化,aof增强了可靠性的同时,对性能有所影响



        不支持,通常用在做缓存,提升性能;



        从1.8版本开始采用binlog方式支持持久化的可靠性



6、数据一致性(事务支持)



        Memcache 在并发场景下,用cas保证一致性



      事务支持比较弱,只能保证事务中的每个操作连续执行



      不支持事务



7、数据分析



       内置了数据分析的功能(mapreduce),其他不支持



8、应用场景



      :数据量较小的更性能操作和运算上



      :用于在动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写少,对于数据量比较大,可以采用sharding)



      主要解决海量数据的访问效率问题


关系和作用

1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。
2、 数据类型--Memcache在添加数据时就要指定数据的字节长度,例如:



而redis不需要,如:redis 127.0.0.1:6379>set key2 "lxsymblog"



3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘
4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10
5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从
6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)
7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复


一些memcache和redis的安装和使用就不赘述啦。只简单说说两种方案的差别。一些感想和测试结果未必足够能说明问题,有什么不妥请大家指正。因为这两天在学习的过程发现一直在更正自己认识的缺陷,每天都会否定前一天的想法。。好了,费话少说。

  经过对50万个数据存储的研究发现:

  每秒单条指令执行量    

   memcache  约3万次

  

   而且,memcache的一大优点是可以通过一个函数直接设置过期时间,而redis需要两个函数才可以既设置了键值对又设置过期时间,也就是redis在这点上效率变成了原来的一半,即5千次,这对于大部分需求来说,有点太慢了。

  memcache的测试代码如下: