我有redis中的几个用户的数据,例如
hset - user111; field - dayssincelogin .....
我想定期为所有用户更新dayssincelogin,其中一种方法是
KEYS user*
HINCRBY ${key from above} dayssincelogin 1
Run Code Online (Sandbox Code Playgroud)
是否可以在一次通话中完成此操作?如果不是最佳方式是什么?我正在使用redis集群和java客户端.
您不能在一个命令中执行多个增量,但可以将命令一起批量处理以提高性能.
使用Redis Pipe-lining或Scripting.
在Jedis我不支持LUA(如果有人可以回答:))
正如@ mp911de建议的那样; 使用Exec for LUA Scripting,您还可以使用流水线技术更快地执行批量方法.
有一个在这里流水线电文读出的更多信息
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}将驻留在同一台服务器
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |