当前位置:首页 > 编程技术 > php技术 > 正文内容

php写一个雪花算法案例

车厘子1年前 (2022-12-11)php技术669

雪花算法是一种分布式 ID 生成算法。它可以在一个分布式系统中生成唯一的 ID。下面是一个简单的 PHP 实现:

<?php
/**
 *  分布式 id 生成类     组成: <毫秒级时间戳+机器id+序列号>
 *  默认情况下41bit的时间戳可以支持该算法使用到2082年,10bit的工作机器id可以支持1023台机器,序列号支持1毫秒产生4095个自增序列id
 *  @author zhangqi
 */
class IdCreate
{
    const EPOCH = 1479533469598;    //开始时间,固定一个小于当前时间的毫秒数
    const max12bit = 4095;
    const max41bit = 1099511627775;
 
    static $machineId = null;      // 机器id
 
    public static function machineId($mId = 0)
    {
        self::$machineId = $mId;
    }
 
    public static function createOnlyId()
    {
        // 时间戳 42字节
        $time = floor(microtime(true) * 1000);
        // 当前时间 与 开始时间 差值
        $time -= self::EPOCH;
        // 二进制的 毫秒级时间戳
        $base = decbin(self::max41bit + $time);
        // 机器id  10 字节
        if(!self::$machineId)
        {
            $machineid = self::$machineId;
        }
        else
        {
            $machineid = str_pad(decbin(self::$machineId), 10, "0", STR_PAD_LEFT);
        }
        // 序列数 12字节
        $random = str_pad(decbin(mt_rand(0, self::max12bit)), 12, "0", STR_PAD_LEFT);
        // 拼接
        $base = $base.$machineid.$random;
        // 转化为 十进制 返回
        return bindec($base);
    }
}
 
?>


本文链接:https://yun.ha.cn/post/35.html 转载需授权!

分享到:

扫描二维码推送至手机访问。

版权声明:本文由云蛤社区发布,如需转载请注明出处。

技术交流QQ群:657091037

部分文章和资源从互联网中收集,如有侵权 联系站长删除。

本文链接:https://yun.ha.cn/post/35.html

分享给朋友:

“php写一个雪花算法案例” 的相关文章

PHP 使用curl发送GET、POST请求

PHP 使用curl发送GET、POST请求

GET请求<?php   //初始化 $curl = curl_init();   //设置url curl_setopt($curl, CURLOPT_URL, 'http://httpbin.org/get&#...

php通过时间戳自动计算 1分钟前,N小时前,N年前的例子

php通过时间戳自动计算 1分钟前,N小时前,N年前的例子

  最近刚好有一个php项目需求,需要用显示帖子的发布时间,时间显示格式要求是这种的:N分钟前,N小时前,N个月前,N年前;其实实现方法有很多种,我这里就用了最简单傻瓜式的方式来写。直接判断秒数来输出对应的时间,具体如下:1分钟 = 60秒1小时 = 3600秒一天(24小时) =&nbs...

对ThinkPHP模型查询出的结果数据集进行排序的方法

对ThinkPHP模型查询出的结果数据集进行排序的方法

   相信很多小伙伴也在用ThinkPHP进行项目开发,ThinkPHP的模型功能可以很方便的对数据库进行增删改查的操作,ThinkPHP的模型也自带了order()方法进行原生MySql排序查询。但是可能会有一些业务逻辑需要将查询的数据集进行二次处理以及排序等操作,今天给大家分...

php实现监听Redis缓存过期回调的方法

php实现监听Redis缓存过期回调的方法

Redis简介   Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis缓存过期Redis是可以设置一个Key的...

PHP实现腾讯云cos对象储存盲水印添加获取文档

PHP实现腾讯云cos对象储存盲水印添加获取文档

    盲水印功能基于腾讯云数据万象,是一种全新的水印模式。通过该功能,您可将水印图以不可见的形式添加到原图信息中,并且不会对原图质量产生太大影响。当发现图片被盗取后,您可对疑似被盗取的资源进行盲水印提取,验证图片归属。 通过该 A...

php Swoole Compiler 扩展全版本大全

php Swoole Compiler 扩展全版本大全

Swoole Compiler 简介Swoole Compiler 是识沃科技推出的 PHP 代码加密和客户端授权解决方案,通过业内先进的代码加密技术,包括流程混淆、花指令、变量混淆、函数名混淆、虚拟机保护技术、扁平化代码、SCCP 优化等,将 PHP 程序源代码编译为二进制指令,来保护您的源代码。...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。