incr
单行原子增(减)操作。详细说明参见单行原子操作。
该操作先将key所指向的value的字节串转换为int64类型(实现上类似于Java的Long.parseLong())函数),然后加上increment,将结果转换为字节串设置为新值。
当参数increment为正数时,即原子加;当参数increment为负数时,即原子减。
- /**
- * Atomically increment value.
- *
- * @param tableName the table name.
- * @param hashKey the hash key to increment.
- * @param sortKey the sort key to increment.
- * @param increment the increment to be added to the old value.
- * @return the new value.
- * @throws PException throws exception if any error occurs.
- */
- public long incr(String tableName, byte[] hashKey, byte[] sortKey, long increment) throws PException;
注:
- 参数:需传入TableName、HashKey、SortKey、Increment。
- 返回值:操作成功后的新值。
- 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,会抛出 PException。另外以下情况也会抛出异常:
- 旧值转换为int64时出错,譬如不是合法的数字或者超出int64范围。
- 旧值加上increment后的结果超出int64范围。
- 其他说明:
- 如果旧值不存在,则把旧值当做0处理,即新值等于increment。
- TTL语义:如果旧值存在,新值的TTL和旧值保持一致;如果旧值不存在,新值将不设TTL。从Pegasus Server v1.11.1开始支持在incr操作时修改TTL,需使用Pegasus Java Client 1.11.2-thrift-0.11.0-inlined-release及以上版本来使用这个功能。
/**
* Atomically increment value.
*
* @param tableName the table name.
* @param hashKey the hash key to increment.
* @param sortKey the sort key to increment.
* @param increment the increment to be added to the old value.
* @param ttlSeconds time to live in seconds for the new value.
* should be no less than -1. for the second method, the ttlSeconds is 0.
* - if ttlSeconds == 0, the semantic is the same as redis:
* - normally, increment will preserve the original ttl.
* - if old data is expired by ttl, then set initial value to 0 and set no ttl.
* - if ttlSeconds > 0, then update with the new ttl if increment succeed.
* - if ttlSeconds == -1, then update to no ttl if increment succeed.
* @return the new value.
* @throws PException throws exception if any error occurs.
*/
public long incr(String tableName, byte[] hashKey, byte[] sortKey, long increment, int ttlSeconds) throws PException;
public long incr(String tableName, byte[] hashKey, byte[] sortKey, long increment) throws PException;
注:
- 除了TTL之外,其他语义都与前面相同。
- TTL操作说明:
- 如果参数ttlSeconds == 0,则和redis语义保持一致:如果旧值存在,新值的TTL和旧值保持一致;如果旧值不存在,新值将不设TTL。
- 如果参数ttlSeconds > 0,则将TTL设置为新值。
- 如果参数ttlSeconds == -1,则清理掉TTL,即新值不再设置TTL。