mirror of
https://github.com/lingble/safe-redis-leader.git
synced 2025-10-29 19:52:33 +00:00
29 lines
793 B
TypeScript
29 lines
793 B
TypeScript
import { readFile as fsReadFile } from "fs";
|
|
import IORedis from "ioredis";
|
|
import { promisify } from "util";
|
|
|
|
const readFile = promisify(fsReadFile);
|
|
|
|
type getIsEqualSetPExpireType = {
|
|
getIsEqualSetPExpire?: (key: IORedis.KeyType, id: string, ms: number) => Promise<boolean>;
|
|
};
|
|
|
|
export async function atomicGetIsEqualSetPExpire(
|
|
asyncRedis: IORedis.Redis & getIsEqualSetPExpireType,
|
|
key: IORedis.KeyType,
|
|
id: string,
|
|
ms: number,
|
|
): Promise<boolean> {
|
|
if (!asyncRedis.getIsEqualSetPExpire) {
|
|
const file = await readFile(`${__dirname}/../luas/atomicGetIsEqualSetPExpire.lua`, "utf8");
|
|
|
|
asyncRedis.defineCommand("getIsEqualSetPExpire", {
|
|
numberOfKeys: 1,
|
|
lua: file,
|
|
});
|
|
}
|
|
|
|
const res = await asyncRedis.getIsEqualSetPExpire!(key, id, ms);
|
|
return res;
|
|
}
|