New:Introducing Socket Scanning for VS Code Marketplace Extensions.Learn more →
Get Started

@lowerdeck/lock

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@lowerdeck/lock

Distributed locking using Redlock for Redis. Ensures atomic operations across multiple instances with automatic lock extension and retry logic.

npmnpm
Version
1.0.2
Version published
Weekly downloads
43
2.38%
Maintainers
1
Weekly downloads
 
Created
Source

@lowerdeck/lock

Distributed locking using Redlock for Redis. Ensures atomic operations across multiple instances with automatic lock extension and retry logic.

Installation

npm install @lowerdeck/lock
yarn add @lowerdeck/lock
bun add @lowerdeck/lock
pnpm add @lowerdeck/lock

Usage

import { createLock } from '@lowerdeck/lock';

const lock = createLock({
  name: 'my-service',
  redisUrl: 'redis://localhost:6379'
});

// Use lock to ensure only one instance runs a critical section
await lock.usingLock('resource-key', async ({ passForNow }) => {
  console.log('Inside critical section');

  // If you want to pass on this execution and retry later
  if (shouldSkip) {
    passForNow();
    return;
  }

  await performCriticalOperation();
});

// Ensure a function runs only once across all instances
await lock.doOnce('unique-task-id', async () => {
  console.log('This will run on only one instance');
  await oneTimeSetup();
});
// Other instances will wait and return null

// Run once and share the result with other instances
const result = await lock.doOnceAndReturn('compute-key', async () => {
  console.log('Computing expensive result once');
  return await expensiveComputation();
});
// First instance computes and caches, others get cached result

// Lock multiple resources at once
await lock.usingLock(['user:123', 'account:456'], async () => {
  await transferFunds();
});

License

This project is licensed under the Apache License 2.0.

Built with ❤️ by Metorial

FAQs

Package last updated on 23 Dec 2025

Related posts