当前位置: 首页 > 面试题库 >

将时间序列存储在Redis中

嵇浩然
2023-03-14
问题内容

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



 类似资料:
  • 我是Cassandra的新手,我想在Cassandra中存储加权图的时间序列,其中边权值随时间而增加,但也随时间而更新。例如, 我的第一个镜头涉及两个CQL v3表: 这个策略有什么可怕的低效吗?应该怎么做?我已经知道表2的更新过程不是幂等的,可能会导致不一致,但我暂时可以接受这一点。 edit:我可以做的一件事是将这两个表合并到一个时间序列表中。

  • 我想知道在R中存储(和处理)多元(特别是矩阵值)时间序列的最佳选择是什么。 我有一个大数据框,它存储了所有数据和时间变量(在本例中,作为一列名为年) 以下是我可以想到的,但两种选择都有各自的缺点: > 数据帧列表,例如通过

  • 问题内容: 我有很多不同提供商的IP范围。例如 我将此IP转换为int32: 我的任务: 通过用户IP地址查找提供者名称(例如192.168.2.20(3232236052)) 在MySQL中很简单: Redis怎么做? 问题答案: 这取决于您是否认为您的IP范围可以重叠。如果不是,则解决方案非常简单: 使用哈希的集合来存储提供者数据 使用zset索引范围的最大值 检索最大值大于IP的(唯一)范围

  • 问题内容: 这就是事情- 我想在特定键下的redis中存储本机JS(node.js)对象(闪存套接字引用)。当我简单地做到这一点时,它存储为一个字符串。当我尝试获得价值时,我得到的只是一个字符串。 有机会工作吗?这是我的代码: 问题答案: 下载者:这里的上下文是SET命令,可以存储任意对象。 不,你不能那样做。您应该接受以下事实:Redis将所有内容存储为字符串(毕竟,协议是基于文本的)。Redi

  • 问题内容: 我有以下课程: 我想序列化HashMap以便将其保存在Redis中。 java.io.NotSerializableException:关键字 问题答案: 使您和类实现。 您要序列化的所有内容都应实现,并且默认情况下可以序列化,因此您无需为它们做任何事情。 请阅读此。

  • 现在针对ABC键的值应该是复杂对象的列表。但当我真的得到“学校::abc” 我用奇怪的字符得到的值如下: \xac\xed\x00\x05SR\x00\x13java.util.arraylistx\x81\xD2\x1D\x99\xC7A\x9D\x03\x00\x01I\x00\x04Sizexp\x00\x00\x00\x01W\x04\x00\x00\x00\x01SR\x00(com.e