基于StackExchange.Redis的分布式锁
直入主题
以IDatabase扩展方法的形式实现分布式锁方法,将代码拷到任意静态类里即可使用。
/// <summary>
/// 使用Redis分布式锁执行某些操作
/// </summary>
/// <param name="lockName">锁名</param>
/// <param name="act">操作</param>
/// <param name="expiry">锁过期时间,若超出时间自动解锁 单位:sec</param>
/// <param name="retry">获取锁的重复次数</param>
/// <param name="tryDelay">获取锁的重试间隔 单位:ms</param>
public static void LockAction(this IDatabase db, string lockName, Action act, int expiry = 10, int retry = 3, int tryDelay = 200)
{
if (act.Method.IsDefined(typeof(AsyncStateMachineAttribute), false))
{
throw new ArgumentException("使用异步Action请调用LockActionAsync");
}
TimeSpan exp = TimeSpan.FromSeconds(expiry);
string token = Guid.NewGuid().ToString("N");
try