Tair | Redis | Memcache | Ehcache | |
---|---|---|---|---|
是否开源 | 开源 | 开源 | 开源 | 开源 |
使用语言 | 服务端C++,客户端支持C、java、php等 | ANSI C语言编写,提供多种语言(c/c++/java/php)的API | 服务端C,客户端支持c、php、java、python等 | java |
集群 | 支持 | 3.0以后支持 | 服务端不支持,客户端使用一致性hash算法将数据分布式存储 | 支持,默认是异步同步 |
容灾 | 支持 | 3.0以后支持 | 可通过客户端实现 | 支持 |
高可用 | 支持 | 3.0以后支持 | 不支持,可通过第三方应用如magent实现 | 支持 |
动态扩展 | 支持 | 3.0以后支持 | 可通过客户端实现 | 支持,本地存储在.data和.index文件 |
效率 | LDB<RDB<MDB | 高 | 高于redis | 高于memcache |
持久化 | LDB、RDB引擎支持 | 支持(AOF,默认RDB) | 不支持,可通过第三方应所以实现 | 支持 |
缓存过期失效策略 | 支持 | 支持 | 支持、LRU算法 | 支持、LRU(默认)、FIFO、LFU |
数据结构 | K/V、list、hash、set、sortedsort等 | K/V、list、hash、set、sortedsort等 | 支持简单的K/V结构 | 支持简单的K/V结构 |
分布式 | 支持 | 3.0以后支持 | 客户端使用一致性hash算法做分布式 | 支持 |
跨机房管理 | 支持 | 不支持 | 不支持 | 不支持 |
多集群管理 | 支持 | 不支持 | 不支持 | 不支持 |
使用状态 | 只有阿里内部大规模使用 | 普遍使用 | 使用情况较多 | 多用于hibernate的缓存实现 |
缺点 | 文档不全、社区不活跃,单节点上性能没有redis高,不能对key实现模糊查询,单条数据不能太大key建议1k以下,value不能超过1M,建议10K以下 | 3.0以前不支持集群,单线程无法充分利用多核服务CPU,事务支持较弱,RDB每次都是写全量数据,成本高,AOF追加导致log特别大 | 结构单一,数据在内存重启会丢失,数据大小受内存限制 | 结构单一,只适用于java体系,只能用java编写客户端,且使用磁盘做cache时占用空间· |
优点 | 采用分布式集群架构,具备自动容灾及故障迁移能力,对存储层做了抽象,底层方便切换不同的存储引擎,采用一致性哈希算法将key分散在Q个桶中,并将桶放到不同的dataserver上,保证数据平衡,tair高可用比较强,容灾性比redis强,支持多种集群结构,支持跨机房数据分布 | 非常丰富的数据结构而且都是原子操作、高速读写、支持事务、支持aof、rdb两种持久化机制,拥有丰富特性、订阅发布pub/sub功能、key过期策略、事务、支持多个db、计数、支持集群和数据备份 | 简介、灵活,多线程非阻塞io效率高,支持多种语言api,且在并发下用cas保证一致性 | 效率高、功能强大,版本迭代特别快、缓存策略支持多种、可以通过rmi可插入api实现分布式缓存、具体缓存监听、支持多种缓存实例、提供hibernate的缓存实现、支持非持久化缓存数据 |