|
- namespace HealthMonitor.Core.Common
- {
- /// <summary>
- /// 分布式同步锁
- /// </summary>
- public class DistributedLocker : IDisposable
- {
- private const string KEY_LOCKER = nameof(DistributedLocker);
- private const int EXPIRE_SECONDS = 10;
-
- private CSRedis.CSRedisClientLock redis_lock;
-
- /// <summary>
- /// 分布式锁(基于Redis)
- /// </summary>
- /// <param name="caller"></param>
- /// <param name="isAutoDelay"></param>
- /// <exception cref="TimeoutException"></exception>
- public DistributedLocker(object caller, bool isAutoDelay = false) : this(caller.GetType().FullName, isAutoDelay) { }
-
- /// <summary>
- /// 分布式锁(基于Redis)
- /// </summary>
- /// <param name="title"></param>
- /// <param name="isAutoDelay"></param>
- /// <exception cref="TimeoutException"></exception>
- public DistributedLocker(string? title = null, bool isAutoDelay = false)
- {
- if (string.IsNullOrWhiteSpace(title)) title = KEY_LOCKER;
-
- redis_lock = RedisHelper.Lock(title, EXPIRE_SECONDS, isAutoDelay);
- if (redis_lock == null) throw new TimeoutException("RedisLock获取超时");
- }
-
-
-
- public void Dispose()
- {
- redis_lock?.Unlock();
-
- //RedisHelper.Del(KEY_LOCKER);
- }
- }
- }
|