import{ range }from"lodash";import Redis from"ioredis";import Redlock from"redlock";import{ RedisOptions }from"ioredis";///const redis = new Redis(6379, "192.168.116.130", { password: "123456" });exportclassRedLockRedis{private client: Redis;private redLock: Redlock;private mutexLock:any;private lockName ="variables:lock";constructor(port:number, host:string, option: RedisOptions){this.client =newRedis(port, host, option);this.redLock =newRedlock([this.client],{
driftFactor:0.01,// multiplied by lock ttl to determine drift time
retryCount:20,
retryDelay:2000,// time in ms
retryJitter:200,// time in ms
automaticExtensionThreshold:500,// time in ms});}publicgetClient(){returnthis.client;}publicConnect(){this.client.connect();}publicDisConnect(){this.client.disconnect();}publicasyncLock(){this.mutexLock =awaitthis.redLock.acquire([this.lockName],5000);}publicasyncUnLock(){awaitthis.mutexLock.release();}publicasyncHSet(key:string, field:string, value:any){awaitthis.client.hset(key, field,JSON.stringify(value));}publicasyncHGet(key:string, field:string){const value =awaitthis.client.hget(key, field);returnJSON.parse(value ??'""');}}(async()=>{const redisLock =newRedLockRedis(6379,"192.168.116.130",{ password:"123456"});for(const v ofrange(1,10001)){await redisLock.Lock();let value =await redisLock.HGet("global","name");if(value){console.log("value=",++value);await redisLock.HSet("global","name", value);}else{console.log("value=",1);await redisLock.HSet("global","name",1);}await redisLock.UnLock();}})();