Memcache & Redis & Tair

一、前言

非关系型数据库(NoSQL = Not Only SQL)的产品非常多,常见的有Memcached、Redis、MongoDB等优秀开源项目,相关概念和资料网上也非常丰富,不再重复描述.

Memcache:

1.  Memcache 只支持简单的k/v结构的数据。

2.  Memcache不支持枚举,不支持持久化和复制等功能

3.Memcache是多线程的,在多核上能线性扩展到每秒处理100,000个请求

4.Memcache提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题

5.    Memcache 的数据都存储 内存中 所以它根本不会有磁盘I/O操作。

6.Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除

新的数据也可能会被剔除,原因可以参考:http://timyang.NET/data/Memcached-lru-evictions/

Redis:

1.Redis支持多种类型数据 k/v  ,list,set,zset,hash等数据结构的存储 还提供了KEYS。

2.   Redis支持数据的备份,即master-slave模式的数据备份

3.   Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用

4.   Redis并不是所有的数据都一直存储在内存中的,Redis只会缓存所有的 key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计 算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除.

5.   从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。

6.  Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断

7.  Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。

8.  Redis除了作为存储之外还提供了一些其它方面的功能,比如聚合计算、pubsub(消息,发布者和监听者)、scripting等。

总结:

1.Redis使用最佳方式是全部数据in-memory。

2.Redis更多场景是作为Memcached的替代者来使用。

3.当需要除key/value之外的更多数据类型支持时,使用Redis更合适。

4.当存储的数据不能被剔除时,使用Redis更合适。

Tair :

1.tair 基于redis

2.一个Tair集群主要包括3个必选模块:configserver、dataserver和client,一个可选模块:invalidserver。通常情况下,一个集群中包含2台configserver及多台dataServer。

两台configserver互为主备并通过维护和dataserver之间的心跳获知集群中存活可用的dataserver,构建数据在集群中的分布信息(对照表)。dataserver负责数据的存储,并按照configserver的指示完成数据的复制和迁移工作

3.支持redis的内存存储结构。支持k/v,list,hash,set等数据结构

ConfigServer的功能

1) 通过维护和dataserver心跳来获知集群中存活节点的信息

2) 根据存活节点的信息来构建数据在集群中的分布表。

3) 提供数据分布表的查询服务。

4) 调度dataserver之间的数据迁移、复制。

1.1.2 DataServer的功能

1) 提供存储引擎

2) 接受client的put/get/remove等操作

3) 执行数据迁移,复制等

4) 插件:在接受请求的时候处理一些自定义功能

5) 访问统计

1.1.3 InvalidServer的功能

1) 接收来自client的invalid/hide等请求后,对属于同一组的集群(双机房独立集群部署方式)做delete/hide操作,保证同一组集群的一致。

2) 集群断网之后的,脏数据清理。

3) 访问统计。

1.1.4 client的功能

1) 在应用端提供访问Tair集群的接口。

2) 更新并缓存数据分布表和invalidserver地址等。

3) LocalCache,避免过热数据访问影响tair集群服务。

4) 流控

2.1.1 Tair缓存使用的场景

1. 数据可以以key/value的形式存储

2. 数据可以接受丢失

3. 访问速度要求很高

4. 单个数据大小不是很大,一般在KB级别

5. 数据量很大,并且有较大的增长可能性

6. 数据更新不频繁

2.1.2 Tair持久化适用的场景

1. 数据可以以key/value的形式存储

2. 数据需要持久化

3. 数据量很大,并且有较大的增长可能性

4. 单个数据大小不是很大,一般在KB级别

5. 数据的读写比例较高

2.2 不适Tair用的场景

1.对数据有查询需求,比如对key的模糊查询,或者根据value反查询key等

2.单条数据很大

3.读写比例很低

5.1 tair优势

a.在分布式集群支持方面tair支持副本,支持多种集群结构,如:一机房一个集群、双     机房单集群单份、双机房独立集群、双机房单集群双份、双机房主备集群;

b.对于读写性能根据结点添加对线性上升,原因是各个结点之间是没有关系,节点增多相应性能提升。

c.高可用比较强,任何小于副本数结点挂掉,不会影响正常业务。

e.淘宝在多个实际应用场景应用,满足不同业务需求。

F.支持跨机房数据分布。

5.2 tair弱势

a.在单节点的性能比较方面,redis是性能比tair高大概1/5

b.redis目前研究人员比较少,社区不是很活跃。

5.3 redis优势

a.在单节点的性能比较方面,redis是性能比tair高大概1/5

b.redis目前研究人员比较多,社区比较活跃。

c.在支持多种数据结构方面tair没有redis支持的全面。

5.4 redis弱势

a.目前发布版不支持分布式,测试版支持,测试版对分布式支持比较弱,是用主备支持高可能,没有副本。

b.容灾性相比tair弱,原因是redis的分布式不支持多副本。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 转载地址:http://gnucto.blog.51cto.com/3391516/998509 Redis与Me...
    Ddaidai阅读 21,440评论 0 82
  • 1、memcache的概念? Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨...
    桖辶殇阅读 2,220评论 2 12
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,265评论 0 36
  • Redis的内存优化 声明:本文内容来自《Redis开发与运维》一书第八章,如转载请声明。 Redis所有的数据都...
    meng_philip123阅读 18,871评论 2 29
  • 昨天的夜里,我恍惚着 仿佛确是遇见你了 在额济纳齐河的左岸 ...
    茶桑阅读 429评论 6 5