palicao/php-redis-time-series

在PHP中使用Redis时间序列

2.1.1 2020-10-27 21:07 UTC

This package is auto-updated.

Last update: 2024-09-27 10:51:49 UTC


README

在PHP中使用 Redis 时间序列

Maintainability Test Coverage Build Status Latest Stable Version PHP version GitHub

快速入门

安装

composer require palicao/php-redis-time-series

要求

该库已测试与以下版本的PHP兼容:

  • PHP 7.2, 7.3, 7.4, 8.0
  • RedisTimeSeries 1.4.10(但它应该与任何1.4版本兼容)

为了使用RedisTimeSeries 1.2,请使用本库的2.1.1版本。

构建

$ts = new TimeSeries(
    new RedisClient(
        new Redis(),
        new RedisConnectionParams($host, $port)
    )
);

TimeSeries 方法

创建

TimeSeries::create(string $key, ?int $retentionMs = null, array $labels = []): void

创建一个键,可选地设置保留时间(以毫秒为单位)和一些标签。

https://oss.redislabs.com/redistimeseries/commands/#tscreate.

修改

TimeSeries::alter(string $key, ?int $retentionMs = null, array $labels = []): void

修改现有键的保留时间以及/或标签。

https://oss.redislabs.com/redistimeseries/commands/#tsalter.

添加

TimeSeries::add(Sample $sample, ?int $retentionMs = null, array $labels = []): Sample

添加一个样本。

如果键未显式创建,则可以设置保留时间和标签。

https://oss.redislabs.com/redistimeseries/commands/#tsadd.

示例

  • $sample = $ts->add(new Sample('myKey', 32.10), 10, [new Label('myLabel', 'myValue')]); 在当前时间戳(redis服务器的时间)将样本添加到myKey并返回它(包含dateTime)。
  • $sample = $ts->add(new Sample('myKey', 32.10, new DateTimeImmutable()), 10, [new Label('myLabel', 'myValue')]); 在指定的日期时间将样本添加到myKey并返回它。

请注意,RedisTimeSeries只允许按顺序添加样本(不允许添加比最新样本更早的样本)

添加多个

TimeSeries::addMany(array $samples): array

添加多个样本。

如常,如果没有提供时间戳,则使用redis服务器当前时间。添加的样本将作为一个数组返回。

https://oss.redislabs.com/redistimeseries/commands/#tsmadd.

incrementBydecrementBy

TimeSeries::incrementBy(Sample $sample, ?int $resetMs = null, ?int $retentionMs = null, array $labels = []): void

TimeSeries::decrementBy(Sample $sample, ?int $resetMs = null, ?int $retentionMs = null, array $labels = []): void

将样本添加到键中,通过在$sample中指定的数量增加或减少最后一个值。值可以在$resetMs毫秒后重置。

类似于add,如果命令用于非现有键,则可以设置保留时间和标签。

https://oss.redislabs.com/redistimeseries/commands/#tsincrbytsdecrby.

创建规则

TimeSeries::createRule(string $sourceKey, string $destKey, AggregationRule $rule): void

创建一个聚合规则,将给定的$rule应用于$sourceKey以填充$destKey

注意,这两个键必须已存在,否则命令将失败。

https://oss.redislabs.com/redistimeseries/commands/#tscreaterule.

示例

  • $ts->createRule('source', 'destination', new AggregationRule(AggregationRule::AVG, 10000) 将通过在 10 秒的时间桶中平均 source 中包含的样本来填充 destination 键。

deleteRule

TimeSeries::deleteRule(string $sourceKey, string $destKey): void

删除现有的聚合规则。

请参阅 https://oss.redislabs.com/redistimeseries/commands/#tsdeleterule.

range

TimeSeries::range(string $key, ?DateTimeInterface $from = null, ?DateTimeInterface $to = null, ?int $count = null, ?AggregationRule $rule = null, bool $reverse = false): Sample[]

检索键中的样本。可以限制查询在给定的时间框架内(通过传递 $from$to),限制检索的样本数量(通过传递 $count),还可以使用 $rule 预聚合结果。

标志 $reverse 将按时间顺序反向返回结果。

请参阅 https://oss.redislabs.com/redistimeseries/commands/#tsrange.

multiRangemultiRangeWithLabels

TimeSeries::multiRange(Filter $filter, ?DateTimeInterface $from = null, ?DateTimeInterface $to = null, ?int $count = null, ?AggregationRule $rule = null, bool $reverse = false): Sample[]

TimeSeries::multiRangeWithLabels(Filter $filter, ?DateTimeInterface $from = null, ?DateTimeInterface $to = null, ?int $count = null, ?AggregationRule $rule = null, bool $reverse = false): SampleWithLabels[]

类似于 range,但不是按键查询,而是查询 $filter 中指定的特定标签集。

multiRangeWithLabels 将返回一个包含 SampleWithLabels 的数组,而不是简单的 Sample

标志 $reverse 将按时间顺序反向返回结果。

请参阅 https://oss.redislabs.com/redistimeseries/commands/#tsmrange.

getLastSample

TimeSeries::getLastSample(string $key): Sample

获取键的最后样本。

请参阅 https://oss.redislabs.com/redistimeseries/commands/#tsget.

getLastSamples

TimeSeries::getLastSamples(Filter $filter): Sample[]

获取匹配给定 $filter 的键集的最后样本。

请参阅 https://oss.redislabs.com/redistimeseries/commands/#tsmget.

info

TimeSeries::info(string $key): Metadata

获取给定键的有用元数据。

请参阅 https://oss.redislabs.com/redistimeseries/commands/#tsinfo.

getKeysByFilter

getKeysByFilter(Filter $filter): string[]

检索匹配给定 $filter 的键列表。

请参阅 https://oss.redislabs.com/redistimeseries/commands/#tsqueryindex.

高级连接参数

您可以使用以下方法操作您的 RedisConnectionParams

  • RedisConnectionParams::setPersistentConnection(bool $persistentConnection) 启用/禁用持久连接
  • RedisConnectionParams::setTimeout(int $timeout) 连接超时(秒)
  • RedisConnectionParams::setRetryInterval(int $retryInterval) 重试间隔(秒)
  • RedisConnectionParams::setReadTimeout(float $readTimeout) 读取超时(秒)

构建过滤器

过滤器由多个过滤操作组成。至少必须提供一个相等操作(在构造函数中提供)。可以使用方法 add 链接添加过滤操作。

示例

  • $f = (new Filter('label1', 'value1'))->add('label2', Filter::OP_EXISTS); 过滤具有 label1 = value1 并且有 label2 的项。
  • $f = (new Filter('label1', 'value1'))->add('label2', Filter::OP_IN, ['a', 'b', 'c']); 过滤具有 label1 = value1 且 label2 是 'a'、'b' 或 'c' 之一的项。

本地测试

对于本地测试,您可以使用提供的 docker-compose.yml 文件,该文件将创建一个 PHP 容器(预安装了 redis 扩展)和一个 redis 容器(包含 Redis 时间序列)。

贡献者

感谢 Mrkisha 的宝贵贡献。