UUID

zan框架封装了redis uuid生成器的调用接口,业务可以直接调用。

配置文件

配置文件即redis配置路径:resource/config/$ENV/redis.php,增加uuid的connection即可。

<?php

return [
    'uuid' => [
        'engine'=> 'redis',
        //uuid生成器server地址
        'host' => 'www.example.com',
        'port' => 6000,
        'pool'  => [
            'maximum-connection-count' => '50',
            'minimum-connection-count' => '10',
            'keeping-sleep-time' => '10',
            'init-connection'=> '2',
        ],
    ],
];

接口

class RedisUuid {
    public function get($tableName);
    public function getSerialId();
    public function getSnowflake();
    public function getObjectId();
}

提供的uuid生成器方法分别为:

  • 自增整数序列(64位整数):获取的id是一递增的序列,灵感来自与mysql的自增id,每秒生成的id数取决于redis-server本身的性能, 目前的物理机,单机单进程可达13w,瓶颈在于io,因为是通过redis的aof always来做数据的持久化
  • serialid(64位整数,人类可读):实现的id算法, 4位无用位+40位秒级时间戳+2位数据中心id+2位进程id+15位自增序列,每秒可以生成2^15 (32768)个id
  • snowflake(64位整数):由twitter提出的snowflake算法,1位无用位+41位毫秒级时间戳+10位机器id+12位自增序列, 每毫秒可以生成2^12(4096)个id
  • objectid(24字节字符串):mongodb实现的id算法, 4字节的时间戳+3字节的数据中心id+2字节的进程id+3字节的自增序列, 每秒可以生成2^24(16777216)个id

使用示例

$tableName = 'unit_test_uuid_table';
$id = (yield RedisUuid::getInstance()->get($tableName));
$serialId = (yield RedisUuid::getInstance()->getSerialId());
$snowflake = (yield RedisUuid::getInstance()->getSnowflake());
$objId = (yield RedisUuid::getInstance()->getObjectId());