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的aofalways来做数据的持久化
- 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());