@tslock/redis-ioredis
v2.0.1
Published
TSLock Redis provider using ioredis
Downloads
384
Readme
@tslock/redis-ioredis
TSLock Redis provider using the
ioredisclient.
A TSLock provider that acquires locks with SET key NX PX <ttl> and releases/extends them with Lua scripts that check the lock value before mutating. This is the ioredis counterpart to @tslock/redis; both share the locking logic in @tslock/redis-core and differ only in the client adapter.
Installation
pnpm add @tslock/core @tslock/redis-ioredis ioredisUsage
import { createLockConfig, DefaultLockingTaskExecutor } from '@tslock/core';
import { createIoRedisLockProvider } from '@tslock/redis-ioredis';
import { Redis } from 'ioredis';
const redisClient = new Redis('redis://localhost:6379');
const provider = createIoRedisLockProvider(redisClient);
const executor = new DefaultLockingTaskExecutor(provider);
await executor.executeWithLock(
() => myScheduledTask(),
createLockConfig({ name: 'my-task', lockAtMostFor: '5m', lockAtLeastFor: '1m' }),
);Configuration
createIoRedisLockProvider(client, config?) accepts an optional config:
| Option | Default | Description |
|---|---|---|
| keyPrefix | 'job-lock' | Redis key namespace. |
| env | 'default' | Environment segment of the key (enables multi-tenancy). |
| safeUpdate | true | When true, unlock/extend use a Lua script that verifies the lock value first. Set false for plain DEL/SET XX. |
The full key is ${keyPrefix}:${env}:${lockName}.
Lock-name safety: Lock names must be non-empty, contain no control characters, and be at most 1024 UTF-8 bytes. Redis ownership values include a hostname and random UUID because safe updates verify the stored value.
Integration tests
Redis integration tests are opt-in and require a running Redis service:
TSLOCK_REDIS_INTEGRATION=1 REDIS_URL=redis://127.0.0.1:6379 pnpm --filter @tslock/redis-ioredis test:integrationExports
| Export | Description |
|---|---|
| createIoRedisLockProvider, IoRedisLockProvider | Factory + class. |
| IoRedisTemplate | The RedisTemplate adapter for ioredis. |
Requirements
- Node.js >= 22
- Peer:
ioredis
License
Apache 2.0 — see LICENSE for details.
