@jbagatta/johnny-locke
Version:
A robust, strongly-consistent distributed locking library that provides atomic operations across multiple processes
6 lines (5 loc) • 1.53 kB
TypeScript
export declare const lockObjKey: (key: string) => string;
export declare const redisPubSubChannel: (namespace: string) => string;
export declare const tryAcquireLockLuaScript = " local exists = redis.call('EXISTS', KEYS[1]) local objKey = 'data-store.' .. KEYS[1] local lockObj = redis.call('GET', objKey) if (exists == 0 or redis.call('HGET', KEYS[1], 'lockStatus') ~= 'locked') then redis.call('HSET', KEYS[1], 'lockId', ARGV[1]) redis.call('PEXPIRE', KEYS[1], ARGV[2]) redis.call('HSET', KEYS[1], 'lockStatus', 'locked') return {ARGV[1], 'locked', lockObj} else local lockId = redis.call('HGET', KEYS[1], 'lockId') local lockStatus = redis.call('HGET', KEYS[1], 'lockStatus') return {lockId, lockStatus, lockObj} end ";
export declare const tryWriteLockLuaScript = " local exists = redis.call('EXISTS', KEYS[1]) if (exists == 1 and redis.call('HGET', KEYS[1], 'lockId') == ARGV[1]) then local objKey = 'data-store.' .. KEYS[1] redis.call('SET', objKey, ARGV[2]) if (ARGV[3] == '-1') then redis.call('PERSIST', objKey) else redis.call('PEXPIRE', objKey, ARGV[3]) end redis.call('HSET', KEYS[1], 'lockStatus', 'unlocked') return true else return false end ";
export declare const getLockObjLuaScript = " local objKey = 'data-store.' .. KEYS[1] local lockObj = redis.call('GET', objKey) local lockStatus = redis.call('HGET', KEYS[1], 'lockStatus') return {lockStatus, lockObj} ";