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);}}}
C#简单使用redis锁相关推荐
- springboot mysql行锁_SpringBoot基于数据库实现简单的分布式锁
本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...
- 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
来自:why技术 又到了一周一次的分享时间啦,老规矩,还是先荒腔走板的聊聊生活. 有上面的图是读大学的时候,一次自行车骑行途中队友抓拍的我的照片.拍照的地方,名字叫做牛背山,一个名字很 low,实际很 ...
- 解锁redis锁的正确姿势
解锁redis锁的正确姿势 redis是php的好朋友,在php写业务过程中,有时候会使用到锁的概念,同时只能有一个人可以操作某个行为.这个时候我们就要用到锁.锁的方式有好几种,php不能在内存中用锁 ...
- 必看企业级Redis锁资产巡检扫描业务场景实现(加锁限制扫描次数)
Redis实现资产巡检扫描 前言 一.需求一:限制扫描次数 1.1 业务分析 1.2 代码实现 二.需求二:限制同一个位置同一时间只能有一个人扫描 1.1 业务分析 1.2 伪代码实现 1.3 具体代 ...
- java加redis锁
redis锁的作用: 防止接口重复提交数据 maven包: <dependency><groupId>org.redisson</groupId><artif ...
- 线上故障之-redis锁处理幂等性失效和幂等性问题解决方案
线上故障之-redis锁处理幂等性失效和幂等性问题解决方案 redis锁处理幂等性失效 事务传播bug try bug 幂等性设计方法 1. insert前先select 2. 加悲观锁 3. 加乐观 ...
- 通过Expire实现Redis锁机制
在我们的业务系统中,可能因为某种原因,用户会不断的点击表单提交按钮,为了较少对系统的 无意义访问.暴力提交 以及用户体验,我们利用redis的过期时间简单的实现了一种Redis锁 当用户提交表单的时候 ...
- 线上故障之-雪花算法重复、序列化、redis锁失效、double精准计算
线上故障之-雪花算法重复.序列化.redis锁失效.double精准计算 雪花算法重复 问题发现 定位 影响范围 解决方案 扩展-雪花算法原理分析: 序列化 运营商 POP 裸机搭售自营套餐事故分析 ...
- RedisTemplate实现Redis锁
Redis锁 项目中使用redis锁主要是依据 redis setnx命令的特性(SETNX:在指定的 key 不存在时,为 key 设置指定的值. 设置成功,返回 1 设置失败,返回 0 ) 实现R ...
最新文章
- LeetCode刷题记录8——605. Can Place Flowers(easy)
- 零基础快速学习Java技术的方法整理
- python操作文件open_python:open/文件操作
- hbase 修改表名_HBase学习——2.HBase原理
- java 常用模块_Java 常见面试题的模块
- uber在限制新司机加入了,看看新政策把
- Codeforces Round #506 (Div. 3) - C. Maximal Intersection (思维,模拟)
- .NET Core玩转机器学习
- ThreadLocal类的实现用法
- Axis1.4 在weblogic9.2中报 (401)Unauthorized 的处理
- nfine框架连接oracle,NFine快速开发框架(无后门)
- matlab经纬度距离方位角,计算经纬度、距离、方位角(示例代码)
- 干货!一文带你认清SD卡、TF卡、SIM卡!
- FTP服务器是什么【摘自IT百科】
- 在HTML中显示base64格式的img图片
- 大数据开发:基于Hadoop的数据分析平台
- C语言之结构体就这样被攻克了!值得收藏!
- 昨天玩游戏的情绪总结
- STC15单片机-ADC获取环境温度(NTC热敏电阻)
- Asp.Net MVC EF各版本区别