我有redis中的几个用户的数据,例如
hset - user111; field - dayssincelogin .....
我想定期为所有用户更新dayssincelogin,其中一种方法是
KEYS user*
HINCRBY ${key from above} dayssincelogin 1
是否可以通过一次通话完成此操作?如果不是最佳方式? 我正在使用redis群集和java客户端。
答案 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}
将位于同一服务器