2022
01-06
01-06
C#实现Redis的分布式锁
目录Redis实现分布式锁(悲观锁/乐观锁)Redis连接池使用Redis的SetNX命令实现加锁,调用方式Redis实现分布式锁(悲观锁/乐观锁)对锁的概念和应用场景在此就不阐述了,网上搜索有很多解释,只是我搜索到的使用C#利用Redis的SetNX命令实现的锁虽然能用,但是都不太适合我需要的场景。Redis有三个最基本属性来保证分布式锁的有效实现:安全性:互斥,在任何时候,只有一个客户端能持有锁。活跃性A:没有死锁,即使客户端在...
继续阅读 >
上篇redis实现的分布式锁,有一个问题,它不可重入。所谓不可重入锁,即若当前线程执行某个方法已经获取了该锁,那么在方法中尝试再次获取锁时,就会获取不到被阻塞。同一个人拿一个锁,只能拿一次不能同时拿2次。1、什么是可重入锁?它有什么作用?可重入锁,也叫做递归锁,指的是在同一线程内,外层函数获得锁之后,内层递归函数仍然可以获取到该锁。说白了就是同一个线程再次进入同样代码时,可以再次拿到该锁。它的作用是...
一、Redis分布式锁概念篇建议直接采用Redis的官方推荐的Redisson作为redis的分布式锁1.1、为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug! 注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享...
一.模拟问题最近在公司遇到一个问题,挂号系统是做的集群,比如启动了两个相同的服务,病人挂号的时候可能会出现同号的情况,比如两个病人挂出来的号都是上午2号.这就出现了问题,由于是集群部署的,所以单纯在代码中的方法中加锁是不能解决这种情况的.下面我将模拟这种情况,用redis做分布式锁来解决这个问题.1.新建挂号明细表2.在idea上新建项目下图是创建好的项目结构,上面那个parent项目是其他项目不用管它,和新建的没有关系3.开始创...