tair缓存开发指南.docx_第1页
tair缓存开发指南.docx_第2页
tair缓存开发指南.docx_第3页
tair缓存开发指南.docx_第4页
tair缓存开发指南.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

tair缓存开发指南Tair用户指南本文档介绍了Tair客户端的工作原理,以及Java客户端的使用方法和接口介绍。工作原理Tair是一个分布式的key/value存储系统,数据往往存储在多个数据节点上。客户端需要决定数据存储的具体节点,然后才能完成具体的操作。Tair的客户端通过和configserver交互获取这部分信息。configserver会维护一张表,这张表包含hash值与存储其对应数据的节点的对照关系。客户端在启动时,需要先和configserver通信,获取这张对照表。在获取到对照表后,客户端便可以开始提供服务。客户端会根据请求的key的hash值,查找对照表中负责该数据的数据节点,然后通过和数据节点通信完成用户的请求。支持的客户端Tair当前支持Java和c+语言的客户端。java客户端使用指南java版本兼容性Tair的java客户端需要JDK 1.5或与其兼容的环境。我们使用Sun公司的JDK 1.5在 Linux和Windows上测试过。依赖Tair客户端使用mina(/)通信框架与Tair server通信,所以使用Tair java客户端需要确保运行环境中包含mina的jar包以及其依赖的库,mina请使用1.1.x的版本。配置java客户端支持的配置项配置项名称类型是否必选默认值说明configServerListList是无configserver地址列表,ip:port格式groupNameString是无group的name,一个configserver服务可以管理多个group,所以需要使用groupName加以区分charsetString否UTF-8字符集,这个选项在将String对象序列化时使用compressionThresholdint否8192压缩阀值,单位为字节。当数据的大小超过这个阀值时,客户端将自动采用zip压缩算法压缩数据,并在接受到数据时自动解压。maxWaitThreadint否100最大等待线程数,当超过这个数量的线程在等待时,新的请求将直接返回超时timeoutint否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();如果你的系统使用spring,那么可以使用类似下面的bean配置: CONFIG_SERVER_ADDREEE:PORT CONFIG_SERVER_ADDREEE_2:PORT GROUP_NAME 接口介绍预备知识由于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 / 异常处理 mget接口mget接口用于批量获取同一个namespace中的多个key对应的数据集合。mget在客户端将key列表根据key所在的服务器分组,然后将分组后的key列表发送到对应的服务器上,发送到多个服务器这个步骤是异步的,所以需要的时间不是线性的。当得到返回结果时 如果返回的个数为0,ResultCode为ResultCode.DATANOTEXSITS 如果返回的个数小于请求的个数,ResultCode为ResultCode.PARTSUCC 全部返回,则返回成功当有数据返回时,Result对象中的value是一个List,这个List包含了所有取到的数据,每个 DataEntry都会包括请求的key,返回的value和version信息。 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);/ 使用全参数版本的putrc = tairManager.put(namespace, key, value, version, expireTime); delete接口delete接口用于删除有namespac和key指定的value。如果请求删除的key不存在,tair也将返回成功。示例:/ 使用删除接口ResultCode rc = tairManager.delete(namespace, key);if (rc.isSuccess() / 删除成功 else / 删除失败 mdelete接口mdelete接口用于批量删除数据,该接口只能删除同一个namespace中的多条数据。其工作原理和mget接口类似。示例:/ 使用批量删除接口ResultCode rc = tairManager.mdelete(namespace, keys);if (rc.isSuccess() / 删除成功 else / 部分成功处理代码 incr接口incr和decr接口配合使用可以提供计数器的功能。使用get和put接口也能实现计数器的功能,但由于两个操作不是原子的,很多情况下这不能满足需求。所以我们提供了incr和decr接口,通过这两个接口提供原子的计数器操作。incr接口的方法签名为: Result incr(int namespace, Serializable key, int value, int defaultValue, int expireTime);接口参数的含义为:参数名含义namespace计数器所在的namespacekey计数器的keyvalue本次增加的数量defaultValue当计数器不存在时的初始化值expireTime失效时间,单位为秒示例:Result result = tairManager.incr(namespace, key, 1, 0);if (result.isSuccess() int rv = result.getValue(); / 这里是1 else / 错误处理/ 将返回4result = tairManager.incr(namespace, key, 3, 0);/ 将返回2result = tairManager.decr(namespace, key, 2, 0); item接口item接口是对原有key/value接口的扩充,item接口将value视为一个数组,配合服务器端的支持,可以完成以下操作: 向item末尾添加新的items 获取指定范围的items 删除指定范围的items 获取并删除指定范围的items 获取item的个数Item接口内部使用json格式,只支持基本类型,包括: String Long Integer Double同一个Value中的类型需要保持一致,否则将返回序列化错误。每个item可以指定maxcount,当item的条数操作指定的maxcount是,服务器将自动删除最早插入的item。List intList = new ArrayList();intList.add(1);intList.add(2);/ 添加新的itmesResultCode rc = tairManager.addItems(1, key, intList, 50, 0, 0);/ 获取item的总条数Result ic = tairManager.getItemCount(1, key);int totalCount = ic.getValue();/ 获取所有itemsResult rets = tairManager.getItems(1, key, 0, totalCount);/ 获取第一个item,并将其从系统中删除rets = tairManager.getAndRemove(1, key, 0, 1);dazzle扩展接口Spring配置:ip:portip:port group_1api接口:/* * 获取数据如果缓存中存在则返回缓存数据,否则使用DataLoader加载数据并将数据添加到缓存 * * param namespace * 数据所在的namespace * param key * 要获

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论