我需要将一些时间序列数据存储到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
由应用程序编码/解析值:时间戳格式。
排序集被实现为跳跃列表加哈希表,因此它们在内存中并不是特别紧凑。如果您的数据量很大,那么其他解决方案将为您提供更好的服务。
有些人使用普通字符串来编码时间序列,这比排序集更紧凑。您可以在这里找到一个示例:https://github.com/antirez/redis-timeseries https://github.com/antirez/redis-timeseries
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)