//获取分布式锁
public static bool EnterLock(string lockName, int seconds)
{
BasicRedisClientManager basicRedisClientManager = new BasicRedisClientManager(ConfigurationManager.AppSettings["RedisServerIP"].ToString());
using (var redisClient = basicRedisClientManager.GetClient())
{
if (redisClient.ContainsKey(lockName))
{
return false;
}
else
{
DateTime expired = DateTime.Now.AddSeconds(seconds);
redisClient.Add(lockName, "1", expired);
return true;
}
}
}
//释放分布式锁
public static void ExitLock(String lockName)
{
BasicRedisClientManager basicRedisClientManager = new BasicRedisClientManager(ConfigurationManager.AppSettings["RedisServerIP"].ToString());
using (var redisClient = basicRedisClientManager.GetClient())
{
redisClient.Delete(lockName);
}
}
public void TestRedisLock()
{
string lockName = "lockTest";
if (EnterLock(lockName, 10))
{
//执行获得分布式Lock的操作
ExitLock(lockName);
}
}
==============================
BasicRedisClientManager basicRedisClientManager = new BasicRedisClientManager(ConfigurationManager.AppSettings["RedisServerIP"].ToString());
using (IRedisClient RClient = basicRedisClientManager.GetClient())
{
if (!RClient.ContainsKey("key"))
{
using (IRedisTransaction IRT = RClient.CreateTransaction())
{
IRT.QueueCommand(r => { if (r.ContainsKey("key")) { r.Add("key", 1); } });
IRT.Commit(); // 提交事务
}
}
}
public static bool EnterLock(string lockName, int seconds)
{
BasicRedisClientManager basicRedisClientManager = new BasicRedisClientManager(ConfigurationManager.AppSettings["RedisServerIP"].ToString());
using (var redisClient = basicRedisClientManager.GetClient())
{
if (!redisClient.ContainsKey(lockName))
{
using (redisClient.AcquireLock(lockName + "_redisLock"))
{
if (!redisClient.ContainsKey(lockName))
{
DateTime expired = DateTime.Now.AddSeconds(seconds);
redisClient.Add(lockName, "1", expired);
return true;
}
}
}
return false;
}
}
=======================
using (redisClient.AcquireLock("_redisLock")){//逻辑}
redisClient.AcquireLock("testlock", TimeSpan.FromSeconds(10));{}
public static void TestRedisLock()
{
string lockName = "zhq_lock";
if (EnterLock(lockName, 100))
{
//执行获得分布式Lock的操作
//创建data
Console.Write("lockName");
ExitLock(lockName);
}
else
{
while (true)
{
//try
Thread.Sleep(1000);
if (EnterLock(lockName, 100))
{
TestRedisLock();
}
}
}
}
lock=wait+ single