PhpStudy环境下idgenerator-php-extension库生成雪花id
为什么会用到雪花id
我们在项目中比较常用的主键类型有自增id和UUID,这两个类型的介绍在网上有很多文章,这里就不展开写了。我用雪花id的原因是我不想别人可以轻易猜到这个是id(捂脸)。
雪花id生产算法
https://gitee.com/yitter/idgenerator
这个库中有多种语言的雪花id实现,这次我们用到的是PHP扩展,作者不是用纯php实现的而是用C语言实现扩展。所以我们得下载一下作者编译好的dll库。各位看官大牛也可以自己编译获得。
-
首先我们进入gitee中PHP的目录https://gitee.com/yitter/idgenerator/tree/master/PHP
-
可以看到有一个Release目录,然后点进去
-
在写这个文章时,这里面有三个编译好的库。根据您的环境下载一个即可。我的php环境使用php7.3nts-vc15-php_snowdrift.zip这个。
如何在windows中phpstudy v8版本中安装使用
我用的是phpstudy集成环境做开发的,所以这里写一下如何结合安装使用
-
解压下载的php7.3nts-vc15-php_snowdrift.zip,将他解压到【phpstudy的安装目录】\Extensions\php\php7.3.4nts\ext,如图
-
接下来我们修改一下php.ini,在目录【phpstudy的安装目录】\Extensions\php\php7.3.4nts目录下找到php.ini,用记事本打开
-
按照gitee文档配置参数
-
我们把以下内容复制并粘贴到php.ini中
[snowdrift] extension=D:/您的phpstudy安装目录/Extensions/php/php7.3.4nts/ext/php_snowdrift.dll;这个是就是刚刚解压的雪花id扩展库 snowdrift.Method=1 ;雪花计算方法,(1-漂移算法|2-传统算法),默认1 snowdrift.BaseTime=1582136402000 ;基础时间(ms单位),不能超过当前系统时间 snowdrift.WorkerId=1 ;机器码,必须由外部设定,最大值 2^WorkerIdBitLength-1 snowdrift.WorkerIdBitLength=6 ;机器码位长,默认值6,取值范围 [1, 15](要求:序列数位长+机器码位长不超过22) snowdrift.SeqBitLength=6 ;序列数位长,默认值6,取值范围 [3, 21](要求:序列数位长+机器码位长不超过22) snowdrift.MaxSeqNumber=0 ;最大序列数(含),设置范围 [MinSeqNumber, 2^SeqBitLength-1],默认值0,表示最大序列数取最大值(2^SeqBitLength-1] snowdrift.MinSeqNumber=5 ;最小序列数(含),默认值5,取值范围 [5, MaxSeqNumber],每毫秒的前5个序列数对应编号0-4是保留位,其中1-4是时间回拨相应预留位,0是手工新值预留位 snowdrift.TopOverCostCount=2000 ;最大漂移次数(含),默认2000,推荐范围 500-20000(与计算能力有关) snowdrift.Multi=0 ;是否支持多WorkerId,0:不支持(可用WorkerId=snowdrift.WorkerId),1:支持(可用WorkerId=1~(2^WorkerIdBitLength-1)),默认0
-
粘贴完如图,保存,重启phpstudy服务
结合ThinkPHP6使用
以上就相当于安装完成了,接下来我们在tp6中用一下
-
phpstudy中新建站点
-
我们先看看网站有没有创建成功,打开浏览器访问一下,看到下面的内容就证明站点可以访问
-
我们调用一下雪花id生成函数,看看是否成功,打开我们的项目,这里我用vs code打开,我们改造一下方法
-
按照gitee上文档调用示例
-
保存,浏览器访问一下
-
完成,Index.php的代码如下
<?php namespace app\controller; use app\BaseController; class Index extends BaseController { public function index() { $id=\SnowDrift::nextId(); echo $id; } }
完结撒花
希望可以帮到您