tuupola / ksuid
K-Sortable 全局唯一标识符
2.1.0
2020-09-10 11:13 UTC
Requires
- php: ^7.1|^8.0
- tuupola/base62: ^1.0|^2.0
Requires (Dev)
- overtrue/phplint: ^1.0
- phpstan/phpstan: ^0.12.42
- phpunit/phpunit: ^7.0|^8.0|^9.0
- squizlabs/php_codesniffer: ^3.0
README
此库实现了Segment的K-Sortable 全局唯一标识符。另请参阅名为UUID简史的文章。
KSUID 是用于K-Sortable Unique Identifier。它是一种生成类似RFC 4122 UUID的全局唯一ID的方法,但包含时间组件,因此可以根据创建时间“大致”排序。KSUID的其余部分是随机生成的字节。
安装
使用 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)。有关更多信息,请参阅许可证文件。