RedisTimeSeries 是 Redis 的一个插件,用于高效地存储和检索时间序列数据。这种数据结构非常适合用于监控、物联网(IoT)、金融交易、社交网络活动等各种场景,其中时间序列数据的常见特点是按时间顺序存储,且查询通常围绕时间窗口进行。
RedisTimeSeries 提供的功能包括:
- 添加数据点:向时间序列中添加带有时间戳和值的数据点。
- 查询数据点:可以根据时间范围、样本数量、聚合函数等方式查询数据点。
- 聚合操作:支持对数据进行聚合,如求和、平均值、最小值、最大值等。
- 带标签的数据:支持为时间序列数据打标签,方便根据标签筛选和查询数据。
- 保留策略:可以设置数据保留策略,以控制存储空间和历史数据的有效期。
使用方法和示例(基于 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 还提供了许多其他的高级功能和操作,下面列举一些补充内容:
- ALTER:
- 可以修改现有时间序列的属性,如改变其保留期限(RETENTION)或者压缩策略(COMPRESSION)。
TS.ALTER myts RETENTION 129600 # 将保留期限改为 36 小时
- MADD:
- 一次添加多个数据点到一个或多个时间序列中。
TS.MADD key1 timestamp1 value1 key2 timestamp2 value2 ...
- CREATERULE:
- 创建一个规则,用于将一个时间序列的聚合结果自动写入另一个时间序列。
TS.CREATERULE source_key dest_key AGGREGATION MAX 3600
- DELETERULE:
- 删除已创建的规则。
TS.DELETERULE source_key dest_key
- QUERYINDEX:
- 根据标签查询符合条件的时间序列键。
TS.QUERYINDEX "@device_id=1 AND location=us-west"
- LABELS:
- 获取或设置时间序列的标签。
TS.GET key WITHLABELS # 获取时间序列的全部标签
TS.MGET key1 key2 WITHLABELS # 获取多个时间序列的标签
TS.EDIT key ADD labels field1=value1 field2=value2 # 添加或更新标签
- INFO:
- 查看时间序列的相关信息,如内存占用、数据点数量、第一个和最后一个数据点的时间戳等。
TS.INFO key
- MREVRANGE:
- 类似于
TS.RANGE
,但按照时间倒序返回数据点。
在实际使用 RedisTimeSeries 时,还可以根据具体需求灵活组合使用这些命令,构建更加复杂的时间序列数据分析和存储方案。记得在使用客户端API时查阅对应库的文档,了解如何调用这些功能。