code: public function lock($key)
      {
          $start = microtime(true);
  
          while (is_null($this->redisClient->set($this->getLockKey($key), 'LOCKED', 'PX', 3600, 'NX'))) {
              $passed = (microtime(true) - $start) * 1000;
              if ($passed > $this->lockWaitTimeout) {
                  throw new LockWaitTimeoutException();
              }
              usleep(100);
          }
      }
docs: {@inheritDoc}