* 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以上)
详细对比
对比维度 | 具体参数 | 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 | 支持 |
访问模式 | 是否支持Scan/Range Query | 不支持,并且不支持merge operations | 支持scan;支持range query | |
访问模式 | CAP | CP 用户可配置,CP或AP | ||
访问模式 | 语言支持 | 主流语言 | 主流语言,目前java、ruby可用 | php,restful,java,c/c++ |
访问模式 | 数据自动过期 | 支持 | 支持 | 支持 |
访问性能 | 点写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(延迟不会随单机数据容量增加而增加) |
可运维性 | 可扩展性(自动扩容、在线扩容) | 支持水平扩展 | 在不停读和写的服务下自动扩容 | |
可运维性 | 可用性(是否有单点、数据迁移/单机出错时是否会有服务中断、过载保护、慢查询保护) | 使用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行左右 |
本文首发在 高广超的简书博客 转载请注明!