一、单个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。
这其实是一个悲观锁,也就是一个进程获取到锁之后要等释放别的进程才能继续。
参照:
(9条消息) C#中基于StackExchange.Redis的分布式锁_初夏de遐想的博客-CSDN博客_c# redis分布式锁
(9条消息) .net core 下的分布式事务锁_dotNET跨平台的博客-CSDN博客
一篇和Redis有关的锁和事务的文章 - Sheldon_Lou - 博客园 (cnblogs.com)
二、多个redis节点
实现原理:通过redlock.net来实现分布式锁
Use RedLock implemented in .Net Distributed Lock - Code World (codetd.com)