几种缓存比较

来源:互联网 发布:淘宝如何设置发货地 编辑:程序博客网 时间:2024/06/05 23:12

几种缓存比较

1、memcached

协议简单、基于libevent的事件处理、内置内存存储方式、memcached不互相通信的分布式。 各个memcached不会互相通信以共享信息,分布策略由客户端实现。不会对数据进行持久化,重启memcached、重启操作系统会导致全部数据消失。

Memcached常见的应用场景是存储一些读取频繁但更新较少的数据,如静态网页、系统配置及规则数据、活跃用户的基本数据和个性化定制数据、准实时统计信息等。

2、HBase

列存储
HBase是非结构化数据存储,就是说是基于列的而不是基于行的模式。HBase是介于Map Entry(key & value)和DB Row之间的一种数据存储方式。就点有点类似于Memcache,但不仅仅是简单的一个key对应一个 value,你很可能需要存储多个属性的数据结构,但没有传统数据库表中那么多的关联关系,这就是所谓的松散数据。

3、tair

分布式 key/value存储引擎。tair分为持久化和非持久化两种使用方式,非持久化的tair可以看成是一个分布式缓存;持久化的tair将数据存放于磁盘中,为了解决磁盘损坏导致数据丢失,tair可以配置数据的备份数目,tair自动将一份数据的不同备份放到不同的主机上,当有主机发生异常,无法正常提供服务的时候,其于的备份会继续提供服务。tair是加强版的memcached,提供了数据长期保存的策略。

tair作为一个分布式系统,是由一个中心控制节点和一系列的服务节点组成。我们称中心控制节点为config server,服务节点是data server。config server负责管理所有的data server,维护data server的状态信息。data server对外提供各种数据服务,并以心跳的形式将自身状况汇报给config server。config server是控制点,而且是单点,目前采用一主一备的形式来保证其可靠性。所有的 data server 地位都是等价的,tair支持自定义的备份数。

tair的分布采用的是一致性哈希算法,对于所有的key,分到Q个桶中,桶是负载均衡和数据迁移的基本单位。config server根据一定的策略把每个桶指派到不同的data server上,因为数据按照key做hash算法,所以可以认为每个桶中的数据基本是平衡的。保证了桶分布的均衡性,就保证了数据分布的均衡性。

目前支持MDB,RDB和LDB三款产品,可适用于各种常见的存储场景。
其中MDB属于内存型产品,支持KV和类hashmap结构,性能最优,但不支持持久化存储;
RDB支持List,Set,Zset等复杂的数据结构,性能次之,可提供缓存和持久化存储两种模式;
LDB属于持久化产品,支持KV和类hashmap结构,性能较前两者最差,但持久化可靠性最高。

MDB适用场景

MDB特别适用容量小(一般在M级别,50G之内),读写QPS高(万级别)的应用场景。

性能指标

测试条件:Value 在100字节左右。
性能数据:单机 30W QPS,99%请求在1ms之内完成.

典型应用场景

  • 用于缓存,降低对后端数据库的访问压力。
  • 临时数据存储,分钟级别后失效,偶尔部分数据丢失不会对业务产生较大影响。
  • 读多写少,读 QPS 达到万级别以上。
  • 线上部署方式

MDB 目前有 跨机房独立集群(推荐) 和 跨机房单集群 两种部署方式,数据保存单份。不同的部署方式对应用业务逻辑上会有一定的影响。跨机房独立集群的优势在于避免跨机房访问,机房容灾对集群影响很小,劣势在于有不一致的情况,因此当后端数据源发生变更需要更新tair时,要通过invalid接口删除两个机房的数据,避免读到另一个机房的旧数据。跨机房单集群的优势在于数据只有一份,没有访问不一致的问题,劣势在于会产生跨机房访问,机房容灾时会丢掉大半数据。

使用注意要点

MDB 支持 Key-Value 结构,也支持分层 Key 结构(Pkey-{Skey:Value, Skey:Value})。当使用分层结构(见Prefix 接口)时,一个 Key 对应的 Skey 建议最多不要超过1W个。
MDB 使用时尤其要注意选择合适的线上部署方式,并在申请的时候在备注中说明,这个和应用业务逻辑息息相关。
当应用使用容量超出申请的配额时会发生数据淘汰,如果确定是因业务增长导致容量增加,且淘汰会极大影响业务的,及时联系Tair 相关人员扩容。
当有出现机器宕机(不可预知),集群大规模升级(可知),或者做容灾演练(可知)时,MDB 集群可能会出现部分数据丢失。
Tair mdb不提供数据中心间的备份或同步功能。

4、Redis

Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string、list、set、zset(有序集合)和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序和算法。

与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件(RDB和AOF两种方式),并且在此基础上实现了master-slave(主从)同步,机器重启后能通过持久化数据自动重建内存,使用Redis作为Cache时机器宕机后热点数据不会丢失。

Redis丰富的数据结构也使其拥有更加丰富的应用场景。Redis的命令都是原子性的,可以简单地利用INCR和DECR实现计数功能。使用list可以实现获取最近N个数的操作。sort set支持对数据排序,可以应用在排行榜中。set集合可以应用到数据排重。Redis还支持过期时间设置,可以应用到需要设定精确过期时间的应用。只要可以使用Redis支持的数据结构表示的场景,就可以使用Redis进行存储。

Redis基于乐观锁

5、LevelDB

Leveldb是Google开发的一个非常高效的kv数据库,支持billion级别的数据量,在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计,特别是LSM算法。Leveldb已经作为存储引擎被Riak和Kyoto Tycoon所支持,Tair也已经将LevelDB作为其持久化存储引擎,并部署在线上使用。

6、Cassandra

列存储

7、MongoDB

文档存储

参考:http://www.cnblogs.com/houkai/p/4689912.html
http://www.iteye.com/news/27628