DefaultDistributedLock.cs 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using EasyCaching.Core;
  7. using XF.Domain.Dependency;
  8. using XF.Domain.Locks;
  9. namespace XF.EasyCaching
  10. {
  11. public class DefaultDistributedLock : IDistributedLock, IScopeDependency
  12. {
  13. private readonly IRedisCachingProvider _redisCaching;
  14. public DefaultDistributedLock(IRedisCachingProvider redisCaching)
  15. {
  16. _redisCaching = redisCaching;
  17. }
  18. public bool Acquire(string key, TimeSpan expired) =>
  19. _redisCaching.StringSet(key, key, expired, "nx");
  20. public async Task<bool> AcquireAsync(string key, TimeSpan expired, CancellationToken cancellationToken) =>
  21. await _redisCaching.StringSetAsync(key, key, expired, "nx");
  22. public void Release(string key) => _redisCaching.KeyDel(key);
  23. public async Task ReleaseAsync(string key, CancellationToken cancellationToken) => await _redisCaching.KeyDelAsync(key);
  24. }
  25. }