一、单个redis节点

实现原理:核心采用StackExchange.Redis的LockTake方法实现。
支持同步获取锁,或者等待直到超时获取锁。

基于SENTX命令。

copy一下文档的demo

redis> SETNX mykey "Hello"
(integer) 1
redis> SETNX mykey "World"
(integer) 0
redis> GET mykey
"Hello"
redis> 

第一次调用setnx,设置mykey的value为hello,返回1,表示成功。

第二次调用setnx,设置mykey的value为world,因为第一次调用并没有释放mykey,所以返回0,表示设置失败。

最后获取mykey的值,返回的是hello。

最后记得要去释放mykey。

这其实是一个悲观锁,也就是一个进程获取到锁之后要等释放别的进程才能继续。

参照:

.net core 下的分布式事务锁 (qq.com)

(9条消息) C#中基于StackExchange.Redis的分布式锁_初夏de遐想的博客-CSDN博客_c# redis分布式锁

(9条消息) .net core 下的分布式事务锁_dotNET跨平台的博客-CSDN博客

一篇和Redis有关的锁和事务的文章 - Sheldon_Lou - 博客园 (cnblogs.com)

 

 

二、多个redis节点

实现原理:通过redlock.net来实现分布式锁

.net - IDistributedCache 与 Redis 缓存执行原子操作 - IDistributedCache with Redis cache performing atomic operations - 堆栈内存溢出 (stackoom.com)

Use RedLock implemented in .Net Distributed Lock - Code World (codetd.com)