ex3v / random-string-key-generator
这是一个用于生成随机且唯一的YouTube-like字符串ID的库,作为UUID的替代品
dev-master / 0.1.x-dev
2019-06-27 07:41 UTC
Requires
- php: >=7.1
Requires (Dev)
- doctrine/orm: ^2.6
- phpunit/phpunit: 6.*
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都欢迎 :)