Redis在几个hsets中递增几个字段

时间:2015-09-14 04:30:04

标签: redis jedis

我有redis中的几个用户的数据,例如

hset - user111; field - dayssincelogin .....

我想定期为所有用户更新dayssincelogin,其中一种方法是

KEYS user*
HINCRBY ${key from above} dayssincelogin 1

是否可以通过一次通话完成此操作?如果不是最佳方式? 我正在使用redis群集和java客户端。

1 个答案:

答案 0 :(得分:5)

您不能在一个命令中执行多个增量,但您可以将命令组合在一起以提高性能。

使用Redis Pipe-lining或Scripting。

在Jedis中我不支持LUA(如果有人可以回答:))

正如@ mp911de建议的那样;使用Exec进行LUA脚本编写 您还可以使用流水线技术更快地执行批量方法。

Pipelining readup here了解更多信息

这是sample code to use Jedis Pipelining

Pipeline p = jedis.pipelined();
p.multi();
Response<Long> r1 = p.hincrBy("a", "f1", -1);
Response<Long> r2 = p.hincrBy("a", "f1", -2);
Response<List<Object>> r3 = p.exec();
List<Object> result = p.syncAndReturnAll();

编辑:只有当Redis存在于同一个分片中时,它才允许多键操作。您应该以确保数据亲和力的方式安排密钥。例如key1.{foo}key5678.{foo}将位于同一服务器