小编典典

将时间序列存储在Redis中

redis

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

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


阅读 674

收藏
2020-06-20

共1个答案

小编典典

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

而不是存储:

ZADD timeserie 1392141527245 10

您可以存储:

ZADD timeserie 1392141527245 10:1392141527245

由应用程序来编码/解析value:timestamp格式。

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

有些人使用普通的字符串来编码时间序列,这比排序集更紧凑。您可以在此处找到示例:https//github.com/antirez/redis-
timeseries

2020-06-20