返回 AiToEarn
redlock.service.ts
根目录 / project / aitoearn-backend / libs / redlock / src / redlock.service.ts
1 import { Injectable, Logger } from '@nestjs/common'
2 import { RedisService } from '@yikart/redis'
3
4 @Injectable()
5 export class RedlockService {
6 private readonly logger = new Logger(RedlockService.name)
7
8 constructor(private redis: RedisService) {}
9
10 async acquireLock(key: string, value: string, ttl: number): Promise<boolean> {
11 return await this.redis.setNx(key, value, ttl)
12 }
13
14 async releaseLock(key: string, value: string): Promise<boolean> {
15 const script = `
16 if redis.call("get", KEYS[1]) == ARGV[1] then
17 return redis.call("del", KEYS[1])
18 else
19 return 0
20 end
21 `
22 const result = await this.redis.eval(script, 1, key, value) as number
23 return result === 1
24 }
25 }
26
26 lines TYPESCRIPT