当前位置: 首页 > article >正文

Tair(1):Tair介绍

1 介绍

​ 在Tair出现之前的很长一段时间里,像redis、memcache这些知名NoSql数据库是不支持分布式的,在这样的背景下,由淘宝网自主开发并在2010.6开源的一个高性能、高扩展、高可靠分布式缓存,类似map的key/value结构,在淘宝、天猫等各个应用中广泛应用。

​ Tair官网:https://www.oschina.net/p/tair

​ gitee地址:https://gitee.com/mirrors/Tair

​ github wiki地址:https://github.com/alibaba/tair/wiki

2 概念

  • configID:一个Tair集群的唯一标识
  • namespace:应用的一个内存或者持久化存储区域,0到65535之间的一个数字
  • quta:配额,对应了每个 namespace 储存区的大小限制,超过配额后将使用LRU(最少使用)策略淘汰
  • expireTime:数据的过期时间。当超过过期时间之后,数据将对应用不可见,不同的存储引擎有不同的策略清理掉过期的数据
  • prefix:前缀处理,保证了拥有相同前缀的key根据哈希算法后,分散在同一个dataserver上,提高了处理速度。

3 特性

​ Tair实现了集群部署,特性都是一些集群的特性,容错、解决单点故障、跨机房管理、多集群管理、支持副本等。Tair的特性有:

  • ​Namespace
  • ​Expire
  • ​Prefix
  • ​List,zset,hash,set
  • ​LocalCache
  • ​FlowControl

抽象存储层,内部采用MDB、RDB、LDB三中存储引擎满足了各种存储需求。

​ MDB是内存型,K/V结构,底层是memcache ,由于是内存型性能最高但是不支持持久化。

​ RDB底层是redis引擎,支持List、Set、Zset、Map、String等多种数据结构,性能略低于MDB。

​ LDB是持久化型引擎,底层是google的levelDB,K/V结构,性能最低,但是可靠性最高。

4 应用场景

​ 由于Tair底层的MDB、RDB、LDB三种引擎支持,既能作为缓存使用又可以作为持久化存储数据库,命令除了put、get、delete以及批量接口外,还有一些附加的实用功能比如version支持、原子计数器、item支持,可以用于实现分布式锁,队列等。

5 Tair与其他缓存对比

TairRedisMemcacheEhcache
是否开源开源开源开源开源
使用语言服务器端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的缓存实现、支持非持久化和持久化缓存数据

http://www.kler.cn/a/162095.html

相关文章:

  • Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)
  • 【小程序】封装网络请求request模块
  • 开源vs闭源:你更看好哪一方?
  • 【测试框架篇】单元测试框架pytest(1):环境安装和配置
  • Camera Tuning中AE/AWB/AF基础知识介绍
  • 如何查看电脑关机时间
  • vue2-使用vue-i18n搭建多语言切换环境
  • gitlab-jenkins-shell-helm-chart-k8s自动化部署微服务
  • CopyOnWriteArraySet怎么用
  • 用户管理 --汇总
  • C#无标题栏窗体拖动方法
  • C#-数组池减少GC工作
  • 智能优化算法应用:基于北方苍鹰算法无线传感器网络(WSN)覆盖优化 - 附代码
  • 前端——html拖拽原理
  • Redis默认序列化方式乱码原因及解决办法
  • 谷歌正式发布最强 AI 模型 Gemini
  • C语言——常用库函数
  • 强化学习——简单解释
  • 学习spring、springmvc、mybatis、ssm所有可能用到的依赖总结,父工程pom文件依赖,<packaging>pom</packaging>
  • 2023年5个自动化EDA库推荐
  • 新概念第一册
  • python获取公网IP的三种方法
  • Vue.filter
  • vivado实现分析与收敛技巧9-分析使用率统计数据
  • 7-1 查找书籍
  • 拨号连接bat命令和拨号错误623,系统无法找到此连接的电话簿项的解决方法