Tair(5):Tair核心方法

1 put

put重载了三个方法,namespace是存储空间,0到65535之间,key和value都会序列化,version是版本号,expireTime是失效时间,单位为秒

ResultCode put(int namespace, Serializable key, Serializable value)
ResultCode put(int namespace, Serializable key, Serializable value, int version)
ResultCode put(int namespace, Serializable key, Serializable value, int version, int expireTime)

2 get

Result<DataEntry> get(int namespace, Serializable key)

get接口用于获取单个数据,要获取的数据由namespace和key指定。

当数据存在时,返回成功,数据存放在DataEntry对象中;

当数据不存在时,返回成功,ResultCode为ResultCode.DATANOTEXSITS,value为null。

3 mget

Result<List<DataEntry>> mget(int namespace, List<? extends Object> keys)

mget接口用于批量获取数据,要获取的数据由namespace和keys 集合指定。

数据存放在DataEntry对象中病放到List中返回

4 delete

ResultCode delete(int namespace, Serializable key)

根据namespace和key删除指定缓存

5 mdelete

ResultCode mdelete(int namespace, List<? extends Object> keys)

根据namespace和 keys 批量删除

6 getStat

Map<String,String> getStat(int qtype, String groupName, long serverId)

得到统计信息

7 incr/decr

Result<Integer> incr(int namespace, Serializable key, int value,int defaultValue, int expireTime)
Result<Integer> decr(int namespace, Serializable key, int value,int defaultValue, int expireTime)

namespace:计数器所在的namespace,key:缓存的key,value:本次增加 或者 减少值,defaultValue: 当计数器不存在时的初始化值 ,expireTime:过期时间,单位为秒

8 setCount

ResultCode setCount(int namespace, Serializable key, int count)
ResultCode setCount(int namespace, Serializable key, int count, int version, int expireTime)

将key对应的计数设置成count,忽略key原来是否存在以及是否是计数类型。因为Tair中计数的数据有特别标志,所以不能直接使用put设置计数值。

9 lock/unlock

ResultCode lock(int namespace, Serializable key)

ResultCode unlock(int namespace, Serializable key)

在并发情况下可以通过lock和unlock来实现分布式锁

10 invalid/minvalid

ResultCode invalid(int namespace, Serializable key)
ResultCode minvalid(int namespace, List<? extends Object> keys)

删除缓存

11 version支持

​在Tair的put接口中,有一个version参数,这个参数是为了解决并发更新同一个数据而设置的。很多情况下,更新数据是先get,修改get回来的数据,然后put回系统。如果有多个客户端get到同一份数据,都对其修改并保存,那么先保存的修改就会被后到达的修改覆盖,从而导致数据丢失问题。

​ 比如,缓存中有一个value值为 “a,b,c”,A和B同时get到这个value。A执行操作,在后面添加一个d,value为 “a,b,c,d”。B执行操作添加一个e,value为”a,b,c,e”。如果不加控制,无论A和B谁先更新成功,它的更新都可能会被后到的更新覆盖。

version使用方式

​ get接口返回的是DataEntry对象,该对象中包含get到的数据的版本号,可以通过getVersion()接口获得该版本号。在put时,将该版本号作为put的参数即可。 如果不考虑版本问题,则可设置version参数为0,系统将强行覆盖数据,即使版本不一致。

如果返回version不一致,怎么办?

如果更新所基于的version和系统中当前的版本不一致,则服务器会返回ResultCode.VERERROR。 这时你可以选择重新get数据,然后在新版本的数据上修改;或者设置version为0重新请求,以达到强制更新的效果。

12 Tair使用规范

  1. key和value不能设置太大,否则耗时大,服务qps(每秒查询率)低,影响性能
  2. key不要使用相同的值作为前缀,否则数据都会落到一个dataserver上,增加该数据节点的压力
  3. 批量请求的key个数不要太大,否则也会影响性能
  4. 超时时间也不要设置太大或者太小,设置太小容易超时,设置太大容易阻塞,建议使用默认值
  5. Tair虽然支持list,set,map等复杂数据结构,但是支持不是很好,元素个数不易过多

猜你喜欢

转载自blog.csdn.net/u013938578/article/details/134913349