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

标签 redis jedis

我在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/

相关文章:

java - Redis/java - 写入和读取二进制数据

redis - Redis 中写入时扇出的实用方法是什么?

Redis 在多核 CPU 上的性能

spring - 如果只做简单缓存,Redis 缓存比 Spring 缓存有优势吗?

python - django redis 与 django 显示 ulimit 错误

redis - Servicestack Authentication IsAuthenticated 始终为 false

Redis 作为 Modbus/TCP 的替代品

java - 我的 Elasticache Redis 节点中的当前连接数不断增加

java - Redis/绝地 : Cluster versus Pool

groovy - 如何用jmeter对redis进行基准测试?