在 Redis 中存储时间序列



我需要将一些时间序列数据存储到 redis 中。我有 unix 时间戳,我需要关联一个值(时间戳<->值)

我尝试将时间戳作为分数的排序集(所以我可以在时间戳上做 zrange)和值作为成员。

127.0.0.1:6379> ZADD timeserie 1392141527245 10 1392141527275 12 1392141527100 10
(integer) 2
127.0.0.1:6379> zscan timeserie 0
1) "0"
2) 1) "10"
   2) "1392141527245"
   3) "12"
   4) "1392141527275"
127.0.0.1:6379>

但是我遇到了一个问题,成员是不重复的,而我的值对于不同的时间戳可能是相同的。知道如何解决这个问题吗?另一种数据类型更好吗?

解决此问题的一个简单技巧是连接时间戳和值。

而不是存储:

ZADD timeserie 1392141527245 10

您可以存储:

ZADD timeserie 1392141527245 10:1392141527245

由应用程序对值:时间戳格式进行编码/解析。

排序集作为跳过列表和哈希表实现,因此它们在内存中不是特别紧凑。如果数据量很大,另一种解决方案将为您提供更好的服务。

有些人使用普通字符串来编码时间序列,这比排序集更紧凑。你可以在这里找到一个例子:https://github.com/antirez/redis-timeseries<</p>

div class="one_answers">

这是一个排序,所以值确实不能重复。Redis 可能不是最适合您的工具,请尝试使用像 influxdb 这样的专用数据库。

最新更新