2014-02-21 58 views
8

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

我试图具有时间戳作为评分(这样我就可以做的时间戳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> 

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

回答

13

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

不是存储的:

ZADD timeserie 1392141527245 10 

可以存储:

ZADD timeserie 1392141527245 10:1392141527245 

到应用程序编码/解析值:时间戳格式。

排序集被实现为跳过列表加上一个散列表,所以它们在内存中不是特别紧凑。如果您的数据量很大,您可以通过其他解决方案获得更好的服务。

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

+0

这正是我的解决方案。很有用。谢谢! – maephisto

+0

您无法使用此解决方案提高价值。 –

1

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