Redis: Как рассчитать разницу во времени в отсортированных списках временных рядов? - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь рассчитать время отклика между сообщениями, хранящимися в Redis. Но я понятия не имею, как это сделать.

Сначала я должен сохранить поток сообщений chat_messages, как это

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?

1 Ответ

1 голос
/ 20 января 2020

Временная метка, которую вы используете, кажется, указывается в миллисекундах, поэтому вам нужно только вычесть и преобразовать в нужные вам единицы.

Вы можете получить оценку, используя ZSCORE для каждой сообщение. Или используйте один из методов ZRANGE для одновременного получения нескольких сообщений: ZRANGEBYSCORE ... WITHSCORES.

Вы можете использовать скрипт 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
...