UNPKG

@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
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} ";