UUID¶

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

配置文件¶

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

  1. <?php
  2.  
  3. return [
  4. 'uuid' => [
  5. 'engine'=> 'redis',
  6. //uuid生成器server地址
  7. 'host' => 'www.example.com',
  8. 'port' => 6000,
  9. 'pool' => [
  10. 'maximum-connection-count' => '50',
  11. 'minimum-connection-count' => '10',
  12. 'keeping-sleep-time' => '10',
  13. 'init-connection'=> '2',
  14. ],
  15. ],
  16. ];

接口¶

  1. class RedisUuid {
  2. public function get($tableName);
  3. public function getSerialId();
  4. public function getSnowflake();
  5. public function getObjectId();
  6. }

提供的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

使用示例¶

  1. $tableName = 'unit_test_uuid_table';
  2. $id = (yield RedisUuid::getInstance()->get($tableName));
  3. $serialId = (yield RedisUuid::getInstance()->getSerialId());
  4. $snowflake = (yield RedisUuid::getInstance()->getSnowflake());
  5. $objId = (yield RedisUuid::getInstance()->getObjectId());

原文: http://zanphpdoc.zanphp.io/libs/sdks/uuid.html