redlock-universal
    Preparing search index...

    Class LockManager

    Production-ready lock manager for Redis distributed locking Provides centralized management of locks with monitoring and health checks

    Index

    Constructors

    Methods

    • Acquire multiple locks atomically in a single Redis operation

      IMPORTANT - Deadlock Prevention: Keys are automatically sorted alphabetically before acquisition to prevent deadlocks. The returned lock handles will be in SORTED key order, NOT the original input order.

      Atomicity Guarantee: All locks are acquired atomically using a Lua script - either all succeed or none do. Redis guarantees that Lua scripts execute atomically without interruption.

      Retry Behavior: When a key is already locked, acquireBatch will retry according to the configured retryAttempts and retryDelay options. This allows handling temporary lock contention.

      Example:

      // Input: ['user:3', 'user:1', 'user:2']
      const handles = await manager.acquireBatch(['user:3', 'user:1', 'user:2']);
      // Returns handles in sorted order: ['user:1', 'user:2', 'user:3']

      Parameters

      • keys: string[]

        Array of lock keys to acquire (will be sorted internally)

      • options: {
            nodeIndex?: number;
            retryAttempts?: number;
            retryDelay?: number;
            ttl?: number;
        } = {}

        Acquisition options

        • Optional ReadonlynodeIndex?: number

          Redis node index to use (defaults to 0)

        • Optional ReadonlyretryAttempts?: number

          Number of retry attempts (defaults to manager's defaultRetryAttempts)

        • Optional ReadonlyretryDelay?: number

          Delay between retries in milliseconds (defaults to manager's defaultRetryDelay)

        • Optional Readonlyttl?: number

          Lock time-to-live in milliseconds (defaults to manager's defaultTTL)

      Returns Promise<LockHandle[]>

      Promise resolving to array of lock handles in SORTED key order

      If keys array is empty or contains duplicates

      If any key is already locked after all retry attempts

    • Acquire a lock with automatic tracking

      Parameters

      • key: string
      • options: {
            retryAttempts?: number;
            retryDelay?: number;
            ttl?: number;
            useRedLock?: boolean;
        } = {}

      Returns Promise<LockHandle>

    • Check health of all Redis nodes

      Returns Promise<
          {
              healthy: boolean;
              nodes: { error?: string; healthy: boolean; index: number }[];
          },
      >

    • Create a distributed RedLock for multiple Redis instances

      Parameters

      • key: string
      • options: {
            clockDriftFactor?: number;
            quorum?: number;
            retryAttempts?: number;
            retryDelay?: number;
            ttl?: number;
        } = {}

      Returns RedLock

    • Create a simple lock for single Redis instance

      Parameters

      • key: string
      • options: {
            nodeIndex?: number;
            retryAttempts?: number;
            retryDelay?: number;
            ttl?: number;
        } = {}

      Returns SimpleLock

    • Release multiple locks

      Parameters

      • handles: LockHandle[]

        Array of lock handles to release

      Returns Promise<boolean[]>

      Promise resolving to array of results (true if released, false if already expired)

    • Acquire and manage multiple locks with automatic extension Combines batch acquisition with auto-extension for long-running operations

      Type Parameters

      • T

      Parameters

      • keys: string[]

        Array of lock keys to acquire

      • routine: (signal: ExtendedAbortSignal) => Promise<T>

        Function to execute while holding all locks

      • options: {
            nodeIndex?: number;
            retryAttempts?: number;
            retryDelay?: number;
            ttl?: number;
        } = {}

        Lock configuration options

        • Optional ReadonlynodeIndex?: number

          Redis node index to use (defaults to 0)

        • Optional ReadonlyretryAttempts?: number

          Number of retry attempts (defaults to manager's defaultRetryAttempts)

        • Optional ReadonlyretryDelay?: number

          Delay between retries in milliseconds (defaults to manager's defaultRetryDelay)

        • Optional Readonlyttl?: number

          Lock time-to-live in milliseconds (defaults to manager's defaultTTL)

      Returns Promise<T>

      Promise resolving to the routine result