ex3v/random-string-key-generator

这是一个用于生成随机且唯一的YouTube-like字符串ID的库,作为UUID的替代品

dev-master / 0.1.x-dev 2019-06-27 07:41 UTC

This package is auto-updated.

Last update: 2024-08-27 19:00:36 UTC


README

随机字符串键生成器

这个小库可以轻松生成短小、独特、类似YouTube的ID,您可以在应用程序中使用它来代替UUID。

使用较短的(但仍然唯一)ID将对数据库性能产生积极影响(尤其是MySQL,它对UUID的处理不佳)。

该库包括生成器本身以及Doctrine集成。

它允许您自定义默认生成器的长度,并编写您自己的生成器。

它真的能生成短唯一ID吗?

让我们看看标准8字符长序列可以有多少个唯一值

Example id:

9ZGpFadq

8 characters, each can have one of 64 values.

64^8 = 281 474 976 710 656 different values

最后,即使UUID也可能不是唯一的,这取决于您如何看待它。最后,除非您使用非常短的ID,否则很难得到两个重复的字符串。我在极短的时间内运行了多次大量ID(数千万)的生成测试,并没有产生重复的ID。

如果您真的很担心重复值,可以扩展键长度,但通常这不是必要的。

1. 安装

使用Composer进行安装

composer require ex3v/random-string-key-generator

2. 使用

手动生成ID

$factory   = new GeneratorFactory();
$generator = $factory->getGenerator(); //will give you default generator with basic config

$id = $generator->generateId();

在Doctrine中自动生成ID

只需在字段声明上方设置生成器注释(GeneratedValue(strategy="CUSTOM")CustomIdGenerator(...))。

/**
 * @var string
 *
 * @ORM\Id()
 * @ORM\Column(name="id", type="string")
 * @ORM\GeneratedValue(strategy="CUSTOM")
 * @ORM\CustomIdGenerator(class="Ex3v\RandomStringKeyGenerator\Doctrine\RandomStringKeyGenerator")
 */
 private $id;

更改默认设置

该库包含一个返回8字符长字符串的单个生成器。

更改默认键长度和其他默认设置
//now default generator will return 12 characters long keys
GeneratorFactory::setDefaultStrategy(UniqIdBasedGenerator::class, [GeneratorInterface::KEY_LENGTH => 12]);
获取您自己的生成器实例
$factory = new GeneratorFactory();

$generator = $factory->getGenerator(YourGeneratorImplementingGeneratorInterface::class, ['generator' => 'options']);
我想更改Doctrine和Symfony的默认生成器配置。我该如何做?

遗憾的是,Doctrine元数据工厂限制将任何参数或容器参数/服务传递给ID生成器。您唯一的选择是在应用程序初始化之前设置GeneratorFactory默认值。在Symfony的情况下,您要找的地方是Kernel类。

3. 测试

只需运行

composer test

在此存储库中,以运行测试套件。

4. 贡献

您有关于如何开发它的想法吗?发现了一个错误并想修复它?Pull Requests和Issues都欢迎 :)