工作中,经常会遇到分布式环境中资源访问冲突问题,比如商城的库存数量处理,或者某个事件的原子性操作,都需要确保某个时间段内只有一个线程在访问或处理资源。
因此现在网上也有很多的分布式锁的解决方案,有数据库、MemCache、ZoopKeeper等等的方式。
这次,我们要学习的是一个基于Redis分布式锁的插件,RedLock.Net。
首先必须要有一个Redis服务来支持此分布式锁,其次就当然是要获取此插件了。
可以从Nuget中获取,也可以直接去Github下载 https://github.com/samcook/RedLock.net。
获取到插件,话不多说上代码。这个是分布式锁的封装类,在需要使用锁的地方直接调用即可。
using RedLock; using System; using System.Collections.Generic; using System.Linq; using System.Net; namespace KingsBlog.Core { public class DistributedLockManager { private List<RedisLockEndPoint> azureEndPoint; public DistributedLockManager() { azureEndPoint = new List<RedisLockEndPoint>(); azureEndPoint.AddRange(GetEndPoint().Select(o => new RedisLockEndPoint { EndPoint = o.Item1, Password = o.Item2 })); } /// <summary> /// 从配置文件获取Redis连接 /// </summary>