【问题标题】:storing time series in redis在redis中存储时间序列
【发布时间】:2014-02-22 01:52:56
【问题描述】:

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

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

【问题讨论】:

    标签: nosql redis timestamp time-series


    【解决方案1】:

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

    而不是存储:

    ZADD timeserie 1392141527245 10
    

    你可以存储:

    ZADD timeserie 1392141527245 10:1392141527245
    

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

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

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

    【讨论】:

    • 这正是我采用的解决方案。很有用。谢谢!
    • 您无法使用此解决方案增加价值。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      相关资源
      最近更新 更多