123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <?php
- /*
- * This file is part of the godruoyi/php-snowflake.
- *
- * (c) Godruoyi <g@godruoyi.com>
- *
- * This source file is subject to the MIT license that is bundled.
- */
- namespace Godruoyi\Snowflake;
- use Illuminate\Contracts\Cache\Repository;
- class LaravelSequenceResolver implements SequenceResolver
- {
- /**
- * The laravel cache instance.
- *
- * @var \Illuminate\Contracts\Cache\Repository
- */
- protected $cache;
- /**
- * Init resolve instance, must connectioned.
- *
- * @param \Illuminate\Contracts\Cache\Repository $cache
- */
- public function __construct(Repository $cache)
- {
- $this->cache = $cache;
- }
- /**
- * {@inheritdoc}
- */
- public function sequence(int $currentTime)
- {
- $store = $this->cache->getStore();
- if ($store instanceof \Illuminate\Cache\RedisStore) {
- $lua = "return redis.call('exists',KEYS[1])<1 and redis.call('psetex',KEYS[1],ARGV[2],ARGV[1])";
- if ($store->connection()->eval($lua, 1, $key = $currentTime, 1, 1000)) {
- return 0;
- }
- return $store->connection()->incrby($key, 1);
- }
- // Currently we only implement the redis driver, other drivers
- // are waiting for your implementation ~_~.
- throw new \Exception('Unsupported laravel cache driver.');
- }
- }
|