tuupola/ksuid

K-Sortable 全局唯一标识符

2.1.0 2020-09-10 11:13 UTC

This package is auto-updated.

Last update: 2024-08-27 17:53:56 UTC


README

此库实现了Segment的K-Sortable 全局唯一标识符。另请参阅名为UUID简史的文章。

KSUID 是用于K-Sortable Unique Identifier。它是一种生成类似RFC 4122 UUID的全局唯一ID的方法,但包含时间组件,因此可以根据创建时间“大致”排序。KSUID的其余部分是随机生成的字节。

Latest Version Downloads Software License Build Status Coverage

安装

使用 composer 安装。

$ composer require tuupola/ksuid

此分支需要PHP 7.1或更高版本。较旧的1.x分支也支持PHP 5.6和7.0。

$ composer require "tuupola/ksuid:^1.0"

用法

包含的Base62实现具有基于PHP和GMP的编码器。默认情况下,如果已安装扩展,编码器和解码器将使用GMP函数。如果GMP不可用,则将使用纯PHP编码器。

注意!在整个代码中,术语timestamp指的是KSUID时间戳。术语unixtime指的是传统的Unix时间。KSUID时间戳和Unix时间有不同的纪元。

use Tuupola\Ksuid;

$ksuid = new Ksuid;

print $ksuid; /* p6UEyCc8D8ecLijAI5zVwOTP3D0 */

print $ksuid->timestamp(); /* 94985761 */
print $ksuid->unixtime(); /* 1494985761 */
print bin2hex($ksuid->payload()); /* d7b6fe8cd7cff211704d8e7b9421210b */

$datetime = (new \DateTimeImmutable)
    ->setTimestamp($ksuid->unixtime())
    ->setTimeZone(new \DateTimeZone("UTC"));

print $datetime->format("Y-m-d H:i:s"); /* 2017-05-17 01:49:21 */

如果您喜欢静态语法,可以使用提供的工厂之一。

use Tuupola\KsuidFactory as Ksuid;

$ksuid = Ksuid::create();

$ksuid = Ksuid::fromString("0o5Fs0EELR0fUjHjbCnEtdUwQe3");

$binary = hex2bin("05a95e21d7b6fe8cd7cff211704d8e7b9421210b");
$ksuid = Ksuid::fromBytes($binary);

$ksuid = Ksuid::fromTimestamp(94985761);

$ksuid = Ksuid::fromUnixtime(1494985761);

$timestamp = 94985761;
$payload = hex2bin("d7b6fe8cd7cff211704d8e7b9421210b");
$ksuid = Ksuid::fromTimestampAndPayload($timestamp, $payload);

测试

您可以选择手动或自动在每次代码更改时运行测试。自动测试需要entr工作。

$ make test
$ brew install entr
$ make watch

贡献

有关详细信息,请参阅CONTRIBUTING

安全性

如果您发现任何与安全性相关的问题,请通过tuupola@appelsiini.net发送电子邮件,而不是使用问题跟踪器。

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件