C#简单使用redis锁

使用redis命令

利用SETNX 来创建锁

 获取和删除SETNX

 //servcestack.redis3.9.7
public class RedisHelper
    {
        private readonly static string RedisPath = "123654@127.0.0.1:6379";
        private readonly static PooledRedisClientManager _pool = null;
        public static IRedisClient redisClient = null;
        static RedisHelper()
        {
            if (redisClient == null)
            {
                _pool = new PooledRedisClientManager(new string[] { RedisPath }, 
new string[] { RedisPath }, 
new RedisClientManagerConfig() { MaxReadPoolSize = 50, 
                                MaxWritePoolSize = 50, 
                                    AutoStart = true });
            }
        }


 public static bool GetSetNX(string key) {
            bool issuccess = false;
            lock (_pool)
            {

                using (IRedisClient redisclient = _pool.GetClient())
                {
                    TimeSpan value = new TimeSpan(365, 0, 0, 0);
                    DateTime dateTime = DateTime.UtcNow.Add(value);
                    string value2 = (dateTime.ToUnixTimeMs() + 1L).ToString();
                    issuccess=redisclient.SetEntryIfNotExists(key, value2);
                }
            }
            return issuccess;
        }
        public static bool Remove(string key)
        {
            bool issuccess = false;
            lock (_pool)
            {

                using (IRedisClient redisclient = _pool.GetClient())
                {
                    issuccess = redisclient.Remove(key);
                }
            }
            return issuccess;
        }
         /// <summary>
        /// 模拟使用
        /// </summary>
        /// <returns></returns>
        public static bool SecKill2()
        {
            bool issuccess = false;
            using (IRedisClient r = _pool.GetClient())
            {
                using (RedisLock l=new RedisLock("lock"))
                {
                    try
                    {
                       //业务逻辑
                    }
                    catch (Exception ex)
                    {
                        l.Dispose();
                    }
                    finally
                    {

                    }
                }
            }
            return issuccess;
        }
}

 创建一个简单的锁

    public class RedisLock : IDisposable
    {
        private readonly string key;
        public void Dispose()
        {
            RedisHelper.Remove(key);
        }

        public  RedisLock(string _key) {
            this.key = _key;
            while (true) {
                if (RedisHelper.GetSetNX(key)) {
                    break ;
                }
                Thread.Sleep(100);
            }
        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值