首页 > 数据库 >redis分布式锁实现原理

redis分布式锁实现原理

时间:2023-12-07 16:13:53浏览次数:43  
标签:redis Redis value key using 原理 分布式

在.net core 中,可以使用StackExchange.Redis实现redis分布式锁,

/// <summary>
/// 分布式锁
/// </summary>
/// <param name="Redis">RedisDB</param>
/// <param name="Key">锁标识</param>
/// <param name="Seconds">过期时间(秒)</param>
/// <param name="MilliseSeconds">尝试申请锁时间间隔(毫秒)</param>
public RedisLock(string Key, int Seconds = 60, int MilliseSeconds = 20)
{
key = Key;
value = Guid.NewGuid().ToString();
while (true)
{
bool b = Redis.LockTake(key, value, TimeSpan.FromSeconds(Seconds));
if (b) return;
Thread.Sleep(MilliseSeconds);
}
}

通过使用 Redis.LockTake,尝试对资源(key)加锁,是通过SET lock_key random_value NX PX lock_timeout命令实现的,会尝试设定一个key,其中,NX 确保只有当锁不存在时才设置它,PX 设置锁的过期时间以防止死锁。

所以上面代码,当申请的key已经被加锁了,则申请不成功,就会线程等待(有弊端,如果过期了,还是有可能加上锁,造成同时操作);

当执行完毕后需要释放锁,通过Redis.LockRelease(key, value);这里就能看到value的作用,是为了避免其他人释放锁,只有知道value的才能释放该锁。

/// <summary>
/// 释放锁
/// </summary>
public void Dispose()
{
Redis.LockRelease(key, value);
}

可以将上述方法的类实现IDisposable接口;这样就可以在using语句中自动释放锁啦,具体看using语句和 IDisposable,只有实现了 IDisposable 接口的对象才能在 using 语句中使用。

标签:redis,Redis,value,key,using,原理,分布式
From: https://www.cnblogs.com/lumingprince/p/17882227.html

相关文章

  • redis集群双活-数据迁移
    一、redis双活1、集群搭建(一主两从)Redis-Sentinel是redis官方推荐的高可用性解决方案,sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点,当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能,而redis-sentine......
  • 2022 RedisDays 内容揭秘
    上个月,Redis举办了3场线上会议,分别介绍了即将正式发布的Redis7中包括的重要更新的内容,还有Redis完全重写的RedisJSON2.0模块,和新发布的RedisStack模块。除此之外,在此次线上会议中还介绍了现代化的软件架构与Redis是如何紧密结合在一起,例如Redis与MachineLearning或者人工智能......
  • ARM架构与编程--基于STM32F103 (1)LED原理图
    ARM架构与编程--基于STM32F103--(1)LED原理图--前言学习笔记《硬件知识_LED原理图》一、点亮一个led的步骤当我们学习C语言的时候,我们会写个Hello程序。那当我们写ARM程序,也该有一个简单的程序引领我们入门,这个程序就是点亮LED。我们怎样去点亮一个LED呢?分为三步:1.看原理图,确......
  • 硬件开发笔记(十五):RK3568底板电路VGA显示接口原理图分析
    前言  前面输出了HDMI,LVDS,MIPI-DSI,这里还有一个常用的显示接口就是VGA了,这个用的不多了,一般板子都是hdmi了。  本篇分析底板VGA电路。<br>VGA接口  VGA(VideoGraphicsArray)视频图形阵列是IBM于1987年提出的一个使用模拟信号的电脑显示标准。VGA接口即电脑采用VGA标准输......
  • 工业交换机的内部结构和工作原理,你了解多少?
    工业交换机由许多小组件构造而成,因此,为了更全面地了解和认识工业交换机,我们需要了解其内部结构和工作原理。工业交换机的内部结构:1、主板,也被称为背板,是计算机的核心部件之一。为各业务接口和数据转发单元提供联系通道。背板吞吐量,也被称为背板带宽,指的是工业交换机接口处理器或接......
  • Windows 下部署Redis 主从模式+哨兵模式+JAVA连接方式
    原文:Windows下部署Redis主从模式+哨兵模式+JAVA连接方式_javaredis部署-CSDN博客前言之前项目需求部署redis高可用,走了很多弯路以及相关配置来回折腾浪费了很多时间,特地记录下。主从模式:实现多台redis实例进行服务运行,并且数据相互同步;哨兵模式:实现主服务器和从服务器进行监......
  • 分布式事务-Seata解决方案
    一、定义   Seata解决方案是分布式事务解决方案之一。常用的分布式事务解决方案有:2PC,3PC,TCC,SAGA(seata)、本地消息表、MQ消息事务、最大努力通知。   Seata是一款分布式解决方案,致力于提供高性能和简单易用的分布式事务服务。提供事务模式有:AT,TCC,SAGA,XA。其中......
  • Unity shader实现水波的技术原理
    Unityshader是Unity引擎中非常重要的一个部分,它可以用来实现各种各样的特效效果,其中包括水波效果。本文将详细讲解Unityshader实现水波的技术原理,并给出相关的Shader代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏......
  • 【视频】Copula算法原理和R语言股市收益率相依性可视化分析|附代码数据
    阅读全文:http://tecdat.cn/?p=6193最近我们被客户要求撰写关于Copula的研究报告,包括一些图形和统计输出。copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。在本视频中,我们通过可视化的方式直观地介绍了Copula函数,并通过R软件应用于金融时间序列数据来理解它......
  • Redis发布订阅
    是什么是一种消息通信模式:发送者(PUBLISH)发送消息,订阅者(SUBSCRIBE)接收消息,可以实现进程间的消息传递。Redis可以实现中间件的MQ功能,通过发布订阅实现消息的引导和分流。能干嘛Redis客户端可以订阅任意数量的频道,类似我们微信关注多个公众号。当有新消息通过PUBLISH命令发......