php-snowflake icon indicating copy to clipboard operation
php-snowflake copied to clipboard

关于维护多个sequence的讨论

Open Dmcz opened this issue 2 years ago • 0 comments

假设有users, orders两张数据表,通过snowflake来为他们生成唯一主键id.

如果需要使这两种id的sequence不同怎么处理比较好?

目前想法是实例化两个不同的单例,每个RedisSequenceResolver的前缀设置成不一样的。 不知道有没有更好的方法。

示例:

$this->app->singleton('userIdGenerator', function ($app) {
    return (new Snowflake(0, 0))
        ->setStartTimeStamp(strtotime('2022-07-20')*1000)
        ->setSequenceResolver(
            (new RedisSequenceResolver($app->get('redis')))->setCachePrefix('UserId')
        );
});

$this->app->singleton('orderIdGenerator', function ($app) {
    return (new Snowflake(0, 0))
        ->setStartTimeStamp(strtotime('2022-07-20')*1000)
        ->setSequenceResolver(
            (new RedisSequenceResolver($app->get('redis')))->setCachePrefix('OrderId')
        );
});

Dmcz avatar Sep 16 '22 08:09 Dmcz