@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'
});
await lock.usingLock('resource-key', async ({ passForNow }) => {
console.log('Inside critical section');
if (shouldSkip) {
passForNow();
return;
}
await performCriticalOperation();
});
await lock.doOnce('unique-task-id', async () => {
console.log('This will run on only one instance');
await oneTimeSetup();
});
const result = await lock.doOnceAndReturn('compute-key', async () => {
console.log('Computing expensive result once');
return await expensiveComputation();
});
await lock.usingLock(['user:123', 'account:456'], async () => {
await transferFunds();
});
License
This project is licensed under the Apache License 2.0.