python redistimeseries Отметка времени не может быть старше последней отметки времени во временном ряду

Я пытаюсь использовать пакет Python redistimeseries (RedisLabs v0.8.0) пакет Python Redis (RedisLabs) v3.5.3

Однако когда я выполняю TS.ADD - он всегда возвращает ошибку

redis.exceptions.ResponseError: TSDB: Timestamp cannot be older than the latest timestamp in the time series

независимо от того, какую метку времени я ему даю. Я могу взять одно и то же значение временной метки и без каких-либо проблем сделать то же ADD в redis-cli для одного и того же временного ряда.

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

Пример:

REDIS-CLI 127.0.0.1:6379> TS.CREATE FAN02.RUNTIME RETENTION 604800 LABELS eq_type FANS location SITE1

REDIS-CLI 127.0.0.1:6379>  TS.ADD FAN04.RUNTIME 1591720015 39
(integer) 1591720015

работает отлично.

Но если я сделаю то же самое в Python (используя новый пустой временной ряд), используя текущую метку времени, я получу ошибку;

>>> int(time.time())
1591720015

import redistimeseries.client
rts = redistimeseries.client.Client(host='x.x.x.x', port=6379)
rts.add('FAN04.RUNTIME', int(time.time()), newval)

>>> stacktrace
  File "C:/.../putdata.py", line 105, in main
    rts.add('FAN04.RUNTIME', int(time.time()), newval)
  File "C:\...\venv\lib\site-packages\redistimeseries\client.py", line 186,     in add
    return self.execute_command(self.ADD_CMD, *params)
  File "C:\...\venv\lib\site-packages\redis\client.py", line 901, in execute_command
    return self.parse_response(conn, command_name, **options)
  File "C:\...\venv\lib\site-packages\redis\client.py", line 915, in     parse_response
    response = connection.read_response()
  File "C:\...\venv\lib\site-packages\redis\connection.py", line 756, in read_response
    raise response

redis.exceptions.ResponseError: TSDB: Timestamp cannot be older than the latest timestamp in the time series

Не уверен, что происходит или что я делаю неправильно, мне сложно найти документацию или примеры для пакета Python, которые подчеркнут мою ошибку или непонимание.

Есть идеи?

Я использую Python 3.7, Redis 3.5.3, Redis TimeSeries 0.8.0

1 ответ

Решение

Python time.time() возвращает текущее время как значение секунд с плавающей запятой, тогда как RedisTimeSeries ожидает разрешение в миллисекундах... Попробуйте:

rts.add('FAN04.RUNTIME', int(time.time() * 1000), newval)

Или используйте datetimeс now() или похожие...

Другие вопросы по тегам