在Redis中存储时间序列数据

9

我需要将一些时间序列数据存储到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>

但是我遇到了一个问题,成员不重复,而我的值可能针对不同的时间戳是相同的。有什么好的解决方法吗?是否需要采用其他数据类型?
2个回答

17
一个简单的解决这个问题的技巧是将时间戳和数值连接起来。
而不是存储:
ZADD timeserie 1392141527245 10

你可以存储:

ZADD timeserie 1392141527245 10:1392141527245

应用程序需要编码/解析时间戳格式的值。

排序集合使用跳表和哈希表实现,因此它们在内存中不是特别紧凑。如果您的数据量很大,最好选择另一种解决方案。

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


这正是我采用的解决方案。非常有用。谢谢! - maephisto
使用这个解决方案无法增加数值。 - Inanc Gumus

2

这是一个排序的集合,因此值不能重复。Redis可能不是您使用的最佳工具,请尝试使用像influxdb这样的专业数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接