Redis:如何在一个排序列表的时间序列中计算时间差?

我正在尝试计算存储在Redis中的消息之间的响应时间。但我不知道如何做到这一点。

首先,我需要将聊天消息的时间流存储如下:

ZADD conversation:CONVERSATION_ID:chat_messages TIMESTAMP CHAT_MESSAGE_ID
ZADD conversation:9:chat_messages 1511533205001 2583
ZADD conversation:9:chat_messages 1511533207057 732016

之后,我需要应用程序能够使用Redis计算时间戳之间的时间差,因为我需要使用另一种(可能更慢的)技术之外的额外速度来实现它。

是否有一种使用纯Redis或Lua来实现这一点的方法?

点赞
用户7017466
用户7017466
时间戳似乎是以毫秒为单位的,因此只需要减去并转换为所需的单位即可。

您可以使用 [`ZSCORE`](https://redis.io/commands/zscore) 命令获取每条消息的分数。或者使用其中一个 ZRANGE 方法以一次性获取多个消息:[`ZRANGEBYSCORE ... WITHSCORES`](https://redis.io/commands/zrangebyscore)。

您可以使用 Lua 脚本来获取时间差:

local t1 = redis.call('ZSCORE', KEYS[1], ARGV[1]) local t2 = redis.call('ZSCORE', KEYS[1], ARGV[2]) return tonumber(t2) - tonumber(t1)


完整的 EVAL 命令如下:

EVAL "local t1 = redis.call('ZSCORE', KEYS[1], ARGV[1]) local t2 = redis.call('ZSCORE', KEYS[1], ARGV[2]) return tonumber(t2) - tonumber(t1)" 1 conversation:9:chat_messages 2583 732016


2020-01-20 18:34:12