我需要将一些时间序列数据存储到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
由应用程序来编码/解析value:timestamp格式。
排序集实现为跳过列表和哈希表,因此它们在内存中并不是特别紧凑。如果您的数据量很大,那么另一种解决方案将为您提供更好的服务。
有些人使用普通的字符串来编码时间序列,这比排序集更紧凑。您可以在此处找到示例:https://github.com/antirez/redis- timeseries