我需要将一些时间序列数据存储到redis中。 我有unix时间戳,我需要关联一个值(timestamp< - > value)
我尝试将时间戳作为分数的排序集(因此我可以在时间戳上执行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>
但是我遇到了一个问题,成员不重复,而我的值对于不同的时间戳可能是相同的。 知道如何处理这个问题吗?另一种数据类型更好吗?
答案 0 :(得分:16)
解决此问题的一个简单方法是连接时间戳和值。
而不是存储:
ZADD timeserie 1392141527245 10
你可以存储:
ZADD timeserie 1392141527245 10:1392141527245
直到编码/解析值的应用程序:timestamp format。
排序集实现为跳过列表和散列表,因此它们在内存中不是特别紧凑。如果您的数据量很大,那么另一种解决方案可以为您提供更好的服务。
有些人使用普通字符串来编码时间序列,这比排序集更紧凑。您可以在此处找到示例:https://github.com/antirez/redis-timeseries
答案 1 :(得分:1)
这是一个排序的集,所以确实值不能重复。 Redis可能不是您使用的最佳工具,请尝试使用 influxdb 等专业数据库。