我在redis中有几个用户的数据,例如
hset - user111;字段 - dayssincelogin .....
我想为所有用户定期更新 dayssincelogin,一种方法是
KEYS user*
HINCRBY ${key from above} dayssincelogin 1
是否可以在一次调用中完成此操作?如果不是最好的方法是什么? 我正在使用 redis 集群和 java 客户端。
最佳答案
您不能在一个命令中执行多个增量,但您可以将多个命令组合在一起以提高性能。
使用 Redis 流水线或脚本。
在 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 仅当它们存在于同一分片中时才允许多键操作。您应该以确保数据亲和性的方式安排您的 key 。像 key1.{foo}
和 key5678.{foo}
将驻留在同一台服务器上
关于Redis 在几个 hsets 中递增几个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32557332/