Compare commits
7 Commits
cfd430e31c
...
main
Author | SHA1 | Date | |
---|---|---|---|
7946c61468 | |||
0b77de8b4c | |||
6ae5b3ddd2 | |||
66261365d7 | |||
8ec81cf547 | |||
c26e8f227a | |||
33050a6f4a |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -70,6 +70,7 @@ web_modules/
|
||||
# Optional npm cache directory
|
||||
|
||||
.npm
|
||||
.npmrc
|
||||
|
||||
# Optional eslint cache
|
||||
|
||||
|
6
.npmignore
Normal file
6
.npmignore
Normal file
@@ -0,0 +1,6 @@
|
||||
test/
|
||||
node_modules/
|
||||
README.md
|
||||
.gitignore
|
||||
biome.json
|
||||
bun.lockb
|
@@ -1,9 +1,11 @@
|
||||
{
|
||||
"name": "mutex-lock-redis",
|
||||
"name": "@osudirect/mutex-lock-redis",
|
||||
"version": "1.1.0",
|
||||
"module": "index.ts",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"lint": "bunx biome check --write"
|
||||
"lint": "bunx biome check --write",
|
||||
"publish": "npm publish --scope=ezppfarm"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "1.9.4",
|
||||
|
@@ -31,21 +31,22 @@ export class MutexLock {
|
||||
const releaseFunc = async () => {
|
||||
await this.redisClient.del(lockIdentifier);
|
||||
};
|
||||
|
||||
|
||||
let ttl = this.mutexOptions?.mutex?.ttl || 60;
|
||||
if (ttl <= 0) ttl = 60;
|
||||
|
||||
while (true) {
|
||||
const acquired = await this.redisClient.set(lockIdentifier, "1", {
|
||||
NX: true
|
||||
NX: true,
|
||||
EX: ttl,
|
||||
});
|
||||
|
||||
|
||||
if (acquired) {
|
||||
await this.redisClient.expire(
|
||||
lockIdentifier,
|
||||
this.mutexOptions?.mutex?.ttl || 60
|
||||
);
|
||||
return releaseFunc;
|
||||
}
|
||||
await new Promise(resolve =>
|
||||
setTimeout(resolve, this.mutexOptions?.mutex?.checkInterval || 100)
|
||||
await new Promise((resolve) =>
|
||||
setTimeout(resolve, this.mutexOptions?.mutex?.checkInterval || 100),
|
||||
);
|
||||
}
|
||||
}}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user