在redis中存储时间序列

时间:2014-02-21 11:20:08

标签: nosql redis timestamp time-series

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

我尝试将时间戳作为分数的排序集(因此我可以在时间戳上执行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>

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

2 个答案:

答案 0 :(得分:16)

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

而不是存储:

ZADD timeserie 1392141527245 10

你可以存储:

ZADD timeserie 1392141527245 10:1392141527245

直到编码/解析值的应用程序:timestamp format。

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

有些人使用普通字符串来编码时间序列,这比排序集更紧凑。您可以在此处找到示例:https://github.com/antirez/redis-timeseries

答案 1 :(得分:1)

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