14 | 如何在Redis中保存时间序列数据?

极客时间 | 《Redis核心技术与实战》学习笔记目录

时间序列数据的读写特点

写入特点

  • 插入数据快
  • 要求我们选择的数据类型,在进行数据插入时,复杂度要低,尽量不要阻塞

读特点

  • 查询单条记录
  • 查询时间范围内的数据
  • 对某个时间范围内的数据进行聚合计算
    • 均值
    • 最大、最小值
    • 求和

保存时间序列数据的两种方案

  • Hash 和 Sorted Set
  • RedisTimeSeries

基于 Hash 和 Sorted Set 保存时间序列数据

  • 优点
    • Redis 内在的数据类型,代码成熟和性能稳定
    • 系统稳定性是可以预期
  • 缺点
    • 如果我们需要进行大量的聚合计算,同时网络带宽条件不是太好时,Hash 和 Sorted Set 的组合就不太适合了。此时,使用 RedisTimeSeries 就更加合适一些。

Redis 是怎么保证原子性操作?

Redis 用来实现简单的事务的 MULTIEXEC 命令。当多个命令及其参数本身无误时,MULTI 和 EXEC 命令可以保证执行这些命令时的原子性。

  • MULTI 命令:表示一系列原子性操作的开始。收到这个命令后,Redis 就知道,接下来再收到的命令需要放到一个内部队列中,后续一起执行,保证原子性。
  • EXEC 命令:表示一系列原子性操作的结束。一旦 Redis 收到了这个命令,就表示所有要保证原子性的命令操作都已经发送完成了。此时,Redis 开始执行刚才放到内部队列中的所有命令操作。

为了避免客户端和 Redis 实例间频繁的大量数据传输,我们可以使用 RedisTimeSeries 来保存时间序列数据。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus