Redis中RedisTimeSeries详细及使用示例

RedisTimeSeries 是 Redis 的一个插件,用于高效地存储和检索时间序列数据。这种数据结构非常适合用于监控、物联网(IoT)、金融交易、社交网络活动等各种场景,其中时间序列数据的常见特点是按时间顺序存储,且查询通常围绕时间窗口进行。

RedisTimeSeries 提供的功能包括:

  1. 添加数据点:向时间序列中添加带有时间戳和值的数据点。
  2. 查询数据点:可以根据时间范围、样本数量、聚合函数等方式查询数据点。
  3. 聚合操作:支持对数据进行聚合,如求和、平均值、最小值、最大值等。
  4. 带标签的数据:支持为时间序列数据打标签,方便根据标签筛选和查询数据。
  5. 保留策略:可以设置数据保留策略,以控制存储空间和历史数据的有效期。

使用方法和示例(基于 RedisTimeSeries 的 CLI 或其客户端 API):

CLI 示例

# 安装并启用 RedisTimeSeries 插件
redis-server --loadmodule /path/to/redistimeseries.so

# 连接到 Redis 服务器
redis-cli

# 创建一个新的时间序列 key,并设置有效期为一天
TS.CREATE myts RETENTION 86400 UNCOMPRESSED

# 添加数据点
TS.ADD myts 1599230400 1.5 LABELS device_id 1 location us-west

# 查询数据
TS.RANGE myts 1599220800 1599240000 AGGREGATION AVG 3600000

# 删除时间序列
TS.DEL myts

Java 客户端 API 示例(使用 redis-timeseries-client 库):

import io.redis.timeseries.RedisTimeSeries;
import io.redis.timeseries.client.ClientBuilder;

import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.TimeUnit;

public class RedisTimeSeriesExample {

    public static void main(String[] args) throws Exception {
        // 创建 RedisTimeSeries 客户端
        RedisTimeSeries tsdb = new ClientBuilder().host("localhost").port(6379).build();

        // 创建时间序列,设置保留策略为 1 天
        tsdb.create("myts", 1, ChronoUnit.DAYS);

        // 添加数据点,时间戳为 Unix 时间戳(秒),值为 1.5
        tsdb.add("myts", Instant.now().getEpochSecond(), 1.5);

        // 查询数据,获取过去一天的数据,每小时聚合一次
        tsdb.rangeAggregation("myts", -86400, Instant.now().getEpochSecond(), Aggregation.AVG, 3600);

        // 关闭客户端
        tsdb.shutdown();
    }
}

在上述示例中,我们创建了一个名为 “myts” 的时间序列,添加了一个数据点,并查询了过去一天按小时聚合的数据。实际使用时,请确保已正确安装 RedisTimeSeries 插件并在客户端中正确配置连接参数。

除此之外,RedisTimeSeries 还提供了许多其他的高级功能和操作,下面列举一些补充内容:

  1. ALTER
  • 可以修改现有时间序列的属性,如改变其保留期限(RETENTION)或者压缩策略(COMPRESSION)。
   TS.ALTER myts RETENTION 129600 # 将保留期限改为 36 小时
  1. MADD
  • 一次添加多个数据点到一个或多个时间序列中。
   TS.MADD key1 timestamp1 value1 key2 timestamp2 value2 ...
  1. CREATERULE
  • 创建一个规则,用于将一个时间序列的聚合结果自动写入另一个时间序列。
   TS.CREATERULE source_key dest_key AGGREGATION MAX 3600
  1. DELETERULE
  • 删除已创建的规则。
   TS.DELETERULE source_key dest_key
  1. QUERYINDEX
  • 根据标签查询符合条件的时间序列键。
   TS.QUERYINDEX "@device_id=1 AND location=us-west"
  1. LABELS
  • 获取或设置时间序列的标签。
   TS.GET key WITHLABELS # 获取时间序列的全部标签
   TS.MGET key1 key2 WITHLABELS # 获取多个时间序列的标签
   TS.EDIT key ADD labels field1=value1 field2=value2 # 添加或更新标签
  1. INFO
  • 查看时间序列的相关信息,如内存占用、数据点数量、第一个和最后一个数据点的时间戳等。
   TS.INFO key
  1. MREVRANGE
  • 类似于 TS.RANGE,但按照时间倒序返回数据点。

在实际使用 RedisTimeSeries 时,还可以根据具体需求灵活组合使用这些命令,构建更加复杂的时间序列数据分析和存储方案。记得在使用客户端API时查阅对应库的文档,了解如何调用这些功能。