* Redis
http://www.redis.net.cn/
http://doc.redisfans.com/
* Tair
http://code.taobao.org/p/tair/wiki/index/
适应场景
Redis
适用
- 需要使用复杂数据结构(map, set),map/set中元素很多(1000以上)
- 延迟敏感服务
不适用
- 数据量超过600GB(数据太多,全内存太浪费资源)
- 需要多语言客户端支持
Tair
适用
- 不能容忍数据丢失
- 数据量大,内存放不下的服务
不适用
- 使用复杂数据结构(map/set),map/set中元素很多(1000以上)
详细对比
1.访问模式
| 具体参数 | Redis | Redis Cluster | Tair |
|---|---|---|---|
| 支持Value大小 | 理论上不超过1GB(建议不超过1MB) | 理论上不超过1GB(建议不超过1MB) | 256M(更大value还需要测试) |
| 支持Value结构 | byte[]/list/map/set | byte[]/list/map/set | (1)kv/map/list (2)支持big_list(list无长度限制) (3)支持创建schema,cmd query |
| 支持的总数据量 | 1000+instance | scale out,理论上总数据量无限制 | |
| 适宜的读写比 | 存内存型,均适合 | 存内存型,均适合 | 支持多引擎,适宜各种比例的读写。读多写少(mdb+leveldb),读少写多(leveldb)。 |
| 数据是否可改写 | Y | Y | Y |
| 是否支持Scan/Range Query | 不支持,并且不支持merge operations | 支持scan; 支持range query | |
| CAP | CP | 用户可配置,CP或AP | |
| 语言支持 | 主流语言 | 主流语言,目前java、ruby可用 | php,restful,java,c/c++ |
| 数据自动过期 | 支持 | 支持 | 支持 |
2.访问性能
| 具体参数 | Redis | Redis Cluster | Tair |
|---|---|---|---|
| 点写latency | 虚机上平均1~2ms | 虚机上平均1~2ms | 5~8ms(write through),1ms左右(write back) |
| 点写吞吐率 | 一个instance 5w,单机器整体性能根据cpu来决定 | 一个instance 5w,单机器整体性能根据cpu来决定 | 受限网卡带宽瓶颈(100MB),单机纯内存8w~10w qps(key+value=1k) |
| 批量写吞吐率 | 受限网卡带宽瓶颈 | 受限网卡带宽瓶颈 | 受限网卡带宽瓶颈(100MB),单机纯内存8w ~10w batch/s(batch=10keys,key+value=100,batch_size=1k) |
| 读latency | 虚机上平均1~2ms | 虚机上平均1~2ms | 同机房内存1ms,磁盘5-8ms(延迟不会随单机数据容量增加而增加) |
3.可运维性
| 具体参数 | Redis | Redis Cluster | Tair |
|---|---|---|---|
| 可扩展性(自动扩容、在线扩容) | 支持水平扩展 | 在不停读和写的服务下自动扩容 | |
| 可用性(是否有单点、数据迁移/单机出错时是否会有服务中断、过载保护、慢查询保护) | 使用keepalived或者官方哨兵来保持高可用 | 无单点 | (1)无单点 (2)不中断服务 (3)有过载保护 (4)无慢查询保护,但有慢查询递归树监控 |
| 可靠性(如何防止数据丢失,包括机器断电、硬盘损毁等情形下) | 0~N个数据slave备份(实际使用情况基本是0个备份) | 0~N个数据slave备份(实际使用情况基本是0个备份) | (1)多机数据冗余 (2)断电数据不丢失,重放redo log (3)数据完整性crc校验(防止磁盘损坏) |
| 数据可靠性 | 用户可选是否开启持久化 | 用户可选是否开启持久化 | 强,有持久存储,一般不会丢失数据 |
| 多副本 | 支持(副本平时可读) | 支持(副本平时可读) | 支持(副本平时不提供读写) |
| 副本一致性 | 弱 | 弱 | 可根据业务需求配置强一致/弱一致 |
| 持久化 | 支持。持久化的数据是用于重启后的数据恢复。Redis是一个内存数据库,无论是RDB还是AOF,都只是其保证数据恢复的措施。 | 支持。持久化的数据是用于重启后的数据恢复。Redis是一个内存数据库,无论是RDB还是AOF,都只是其保证数据恢复的措施。 | 支持 |
| 对业务混合部署的支持(性能隔离) | 进程级隔离(特殊处理可以到机器间隔离) | 进程级隔离(特殊处理可以到机器间隔离) | 硬软隔离: (1)支持不同group的业务混步 (2) 支持同一个group业务混步(通过名字空间隔离),支持网络和内存的隔离。 |
| 对访问权限的可控制性 | web操作管理员授权.api操作支持鉴权和非鉴权两种模式 | web操作管理员授权.api操作支持鉴权和非鉴权两种模式 | 机器粒度的白名单管理 |
| 实现语言、代码量 | JAVA,java客户端14000行、管理中心22000行 | JAVA,java客户端14000行、管理中心22000行 | 核心代码c++,10w行左右 |
欢迎关注 高广超的简书博客 与 收藏文章 !
欢迎关注 头条号:互联网技术栈 !
个人介绍:
高广超:多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能、可扩展的互联网架构。
本文首发在 高广超的简书博客 转载请注明!
简书博客
头条号
本文对比了Redis和Tair两种内存数据结构存储系统的应用场景、访问模式、性能及可运维性等方面。Redis适用于需要复杂数据结构的应用场景,而Tair则更适合数据量大的服务。此外还介绍了它们的数据持久化、可扩展性和可靠性等方面的特性。
2718

被折叠的 条评论
为什么被折叠?



