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;
        }
    
    }
    
    

完结撒花

希望可以帮到您

posted @ 2022-09-19 16:42  深海空气  阅读(216)  评论(0编辑  收藏  举报