using StackExchange.Redis;
using System;
using System.Threading;
namespace RedisTest
{
class Program
{
static ConnectionMultiplexer redis;
static IDatabase _db;
static RedisValue token = "Lock";
static void Main(string[] args)
{
try
{
var options = ConfigurationOptions.Parse("localhost");
options.AllowAdmin = true;
redis = ConnectionMultiplexer.Connect(options);
_db = redis.GetDatabase();
var ggg= Lock("wei:123465");
DelLock("wei:1234652");
DelLock("wei:123465");
}
catch (Exception e)
{
var s = e.Message;
}
Console.WriteLine("Hello World!");
}
/// <summary>
/// redis锁
/// </summary>
/// <param name="key">锁的Key</param>
/// <param name="lockExpirySec">锁的时长(单位:秒)</param>
/// <param name="waitLockSec">等待加锁时间(单位:毫秒)</param>
/// <returns>true:加锁成功、false:加锁失败</returns>
public static bool Lock(string key, int lockExpirySec = 60, double waitLockSec = 0)
{
if (waitLockSec > 0)
{
while (true)
{
waitLockSec -= 100;
if (waitLockSec > 0)
{
var IsLock = _db.LockTake("RediseLock:Locl_" + key, token, new TimeSpan(0, 0, 0, lockExpirySec));
if (IsLock)
{
return IsLock;
}
}
else
{
return _db.LockTake("RediseLock:Locl_" + key, token, new TimeSpan(0, 0, 0, lockExpirySec));
}
Thread.Sleep(100);
}
}
else
{
return _db.LockTake("RediseLock:Locl_" + key, token, new TimeSpan(0, 0, 0, lockExpirySec));
}
}
/// <summary>
/// 删除锁 执行完代码以后调用释放锁
/// </summary>
/// <param name="key"></param>
public static void DelLock(string key)
{
_db.LockRelease("RediseLock:Locl_" + key, token);
}
}
}
测试源码:https://download.csdn.net/download/weixin_42401291/22840227