incr

单行原子增(减)操作。详细说明参见单行原子操作

该操作先将key所指向的value的字节串转换为int64类型(实现上类似于Java的Long.parseLong())函数),然后加上increment,将结果转换为字节串设置为新值。

当参数increment为正数时,即原子加;当参数increment为负数时,即原子减。

  1. /**
  2. * Atomically increment value.
  3. *
  4. * @param tableName the table name.
  5. * @param hashKey the hash key to increment.
  6. * @param sortKey the sort key to increment.
  7. * @param increment the increment to be added to the old value.
  8. * @return the new value.
  9. * @throws PException throws exception if any error occurs.
  10. */
  11. 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及以上版本来使用这个功能。
  1. /**
  2. * Atomically increment value.
  3. *
  4. * @param tableName the table name.
  5. * @param hashKey the hash key to increment.
  6. * @param sortKey the sort key to increment.
  7. * @param increment the increment to be added to the old value.
  8. * @param ttlSeconds time to live in seconds for the new value.
  9. * should be no less than -1. for the second method, the ttlSeconds is 0.
  10. * - if ttlSeconds == 0, the semantic is the same as redis:
  11. * - normally, increment will preserve the original ttl.
  12. * - if old data is expired by ttl, then set initial value to 0 and set no ttl.
  13. * - if ttlSeconds > 0, then update with the new ttl if increment succeed.
  14. * - if ttlSeconds == -1, then update to no ttl if increment succeed.
  15. * @return the new value.
  16. * @throws PException throws exception if any error occurs.
  17. */
  18. public long incr(String tableName, byte[] hashKey, byte[] sortKey, long increment, int ttlSeconds) throws PException;
  19. 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。