-
Notifications
You must be signed in to change notification settings - Fork 46
Home
Tair用户指南
本文档介绍了Tair客户端的工作原理,以及Java客户端的使用方法和接口介绍。
工作原理
Tair是一个分布式的key/value存储系统,数据往往存储在多个数据节点上。客户端需要决定数据存储的具体节点,然后才能完成具体的操作。
Tair的客户端通过和configserver交互获取这部分信息。configserver会维护一张表,这张表包含hash值与存储其对应数据的节点的对照关系。客户端在启动时,需要先和configserver通信,获取这张对照表。
在获取到对照表后,客户端便可以开始提供服务。客户端会根据请求的key的hash值,查找对照表中负责该数据的数据节点,然后通过和数据节点通信完成用户的请求。
支持的客户端
java客户端使用指南
java版本兼容性
Tair的java客户端需要JDK 1.5或与其兼容的环境。我们使用Sun公司的JDK 1.5在 Linux和Windows上测试过。
依赖
Tair客户端使用mina( http://mina.apache.org/ )通信框架与Tair server通信,所以使用Tair java客户端需要确保运行环境中包含mina的jar包以及其依赖的库,mina请使用1.1.x的版本。
配置java客户端
支持的配置项
配置项名称 类型 是否必选 默认值 说明
configServerList List 是 无 configserver地址列表,ip:port格式
groupName String 是 无 group的name,一个configserver服务可以管理多个group,所以需要使用groupName加以区分
charset String 否 UTF-8 字符集,这个选项在将String对象序列化时使用
compressionThreshold int 否 8192 压缩阀值,单位为字节。当数据的大小超过这个阀值时,客户端将自动采用zip压缩算法压缩数据,并在接受到数据时自动解压。
maxWaitThread int 否 100 最大等待线程数,当超过这个数量的线程在等待时,新的请求将直接返回超时
timeout int 否 2000 请求的超时时间,单位为毫秒
初始化Java客户端
// 创建config server列表
List confServers = new ArrayList();
confServers.add("CONFIG_SERVER_ADDREEE:PORT");
confServers.add("CONFIG_SERVER_ADDREEE_2:PORT"); // 可选
// 创建客户端实例
DefaultTairManager tairManager = new DefaultTairManager();
tairManager.setConfigServerList(confServers);
// 设置组名
tairManager.setGroupName("GROUP_NAME");
// 初始化客户端
tairManager.init();
接口介绍
预备知识
由于Tair中的value除了用户的数据外,好包括version等元信息。所以返回的用户数据将和元数据一起封装在DataEntry对象中。
Tair客户端的所有接口都不抛出异常,操作的结果状态使用ResultCode表示。如果接口会返回数据,则返回的数据和ResultCode一起封装在Result中。
Result和ResultCode都包含有isSuccess方法,如果该方法返回true,则表示请求成功(当get的数据不存在时,该方法也返回 true)。
基本接口
get接口
get接口用于获取单个数据,要获取的数据由namespace和key指定。
当数据存在时,返回成功,数据存放在DataEntry对象中;
当数据不存在时,返回成功,ResultCode为ResultCode.DATANOTEXSITS,value为null。
示例:
Result result = tairManager.get(namespace, key);
if (result.isSuccess()) {
DataEntry entry = result.getValue();
if(entry != null) {
// 数据存在
} else {
// 数据不存在
}
} else {
// 异常处理
}
put接口
put接口有3个签名,分别为:
ResultCode put(int namespace, Serializable key, Serializable value); // version为0,即不关心版本;expireTime为0,即不失效
ResultCode put(int namespace, Serializable key, Serializable value, int version); // expireTime为0,即不失效
ResultCode put(int namespace, Serializable key, Serializable value, int version, int expireTime);
示例:
ResultCode rc = tairManager.put(namespace, key, value);
if (rc.isSuccess()) {
// put成功
} else if (ResultCode.VERERROR.equals(rc) {
// 版本错误的处理代码
} else {
// 其他失败的处理代码
}
// version应该从get返回的DataEntry对象中获取
// 出给使用0强制更新,否则不推荐随意指定版本
rc = tairManager.put(namespace, key, value, version);
// 使用全参数版本的put
rc = tairManager.put(namespace, key, value, version, expireTime);
delete接口
delete接口用于删除有namespac和key指定的value。如果请求删除的key不存在,tair也将返回成功。
示例:
// 使用删除接口
ResultCode rc = tairManager.delete(namespace, key);
if (rc.isSuccess()) {
// 删除成功
} else {
// 删除失败
}