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

sau*_*ata 1 redis jedis

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

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

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

KEYS user*
HINCRBY ${key from above} dayssincelogin 1
Run Code Online (Sandbox Code Playgroud)

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

Bas*_*wer 5

您不能在一个命令中执行多个增量,但可以将命令一起批量处理以提高性能.

使用Redis Pipe-lining或Scripting.

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

正如@ mp911de建议的那样; 使用Exec for LUA Scripting,您还可以使用流水线技术更快地执行批量方法.

有一个在这里流水线电文读出的更多信息

以下是使用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();
Run Code Online (Sandbox Code Playgroud)

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

  • 可以使用jedis中的`exec()`方法执行Lua脚本. (2认同)