| 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.');
 
-     }
 
- }
 
 
  |