EasilyNET.MongoDistributedLock
2.2024.427.1128
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package EasilyNET.MongoDistributedLock --version 2.2024.427.1128
NuGet\Install-Package EasilyNET.MongoDistributedLock -Version 2.2024.427.1128
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EasilyNET.MongoDistributedLock" Version="2.2024.427.1128" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add EasilyNET.MongoDistributedLock --version 2.2024.427.1128
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: EasilyNET.MongoDistributedLock, 2.2024.427.1128"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install EasilyNET.MongoDistributedLock as a Cake Addin #addin nuget:?package=EasilyNET.MongoDistributedLock&version=2.2024.427.1128 // Install EasilyNET.MongoDistributedLock as a Cake Tool #tool nuget:?package=EasilyNET.MongoDistributedLock&version=2.2024.427.1128
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
EasilyNET.MongoDistributedLock
- 基于 GitHub 开源项目
使用方法
// 使用MongoDB驱动创建一个链接
var setting = new MongoClientSettings
{
Servers = new List<MongoServerAddress> { new("127.0.0.1", 27018) },
Credential = MongoCredential.CreateCredential("admin", "guest", "guest"),
LinqProvider = LinqProvider.V3
};
var client = new MongoClient(setting);
var db = client.GetDatabase("locks");
try
{
// 由于使用到一些特性.需要将这个集合设置成 上限集合
db.CreateCollection("release.signal", new()
{
// 这个数量理论上可以决定同时系统能有多少个锁.
MaxDocuments = 100,
MaxSize = 4096,
Capped = true
});
}
catch
{
// ignored
}
IMongoCollection<LockAcquire> _locks = db.GetCollection<LockAcquire>("lock.acquire");
IMongoCollection<ReleaseSignal> _signals = db.GetCollection<ReleaseSignal>("release.signal");
// 获取锁
// 这里使用一个随机的ID作为锁ID,相当于其他锁中的Key.用来区分不同的业务的锁,也可以将不同的业务类型放到MongoDB中存起来,然后再使用的时候再取获取这个id
const string lockId = "64d44afde4473b85a177084c";
var mongoLock = DistributedLock.GenerateNew(_locks, _signals, ObjectId.Parse(lockId));
var acq = await mongoLock.AcquireAsync(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(0));
// 释放锁 也可以等超时释放
await mongoLock.ReleaseAsync(acq1);
- 实际用的时候大概是这样.
try
{
if (acq.Acquired)
{
// 关键部分,它不能一次由任何服务器上的多个线程执行
// ...
// ...
}
else
{
// 超时!也许另一个线程没有释放锁...我们可以再试一次或抛出例外
}
}
finally
{
// 如果(acq.Acquired)无需手动操作
await mongoLock.ReleaseAsync(acq);
}
- 注意事项和工作原理
- 当您尝试获取锁时,具有指定 lockId 的文档将添加到锁集合中,或者更新(如果存在).
- 释放锁时,将更新文档,并将新文档添加到信号上限集合中
当锁定正在等待时,将使用服务器端等待的可尾游标.详细信息
- 生存期是锁有效的时间段.在此时间之后,锁将自动“释放”,并且可以再次获取.它可以防止死锁.
- 不要使用长时间的超时,这可能会引发 MongoDB 驱动程序的异常.正常超时不超过 1-2 分钟!
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- MongoDB.Driver (>= 2.25.0)
-
net9.0
- MongoDB.Driver (>= 2.25.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on EasilyNET.MongoDistributedLock:
Package | Downloads |
---|---|
EasilyNET.MongoDistributedLock.AspNetCore
MongoDB分布式锁方案 |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
3.24.1031.135 | 20 | 10/31/2024 |
3.24.1031.112 | 22 | 10/31/2024 |
3.24.1031.104 | 21 | 10/31/2024 |
3.24.1029.142 | 67 | 10/29/2024 |
3.24.1025.30 | 75 | 10/24/2024 |
3.24.1022.142 | 55 | 10/22/2024 |
3.24.1018.204 | 130 | 10/18/2024 |
3.24.1018.175 | 128 | 10/18/2024 |
3.24.1018.166 | 123 | 10/18/2024 |
3.24.1018.93 | 126 | 10/18/2024 |
3.24.1017.42 | 79 | 10/16/2024 |
3.24.1016.161 | 79 | 10/16/2024 |
3.24.1015.231 | 75 | 10/15/2024 |
3.24.1015.14 | 81 | 10/14/2024 |
3.24.1012.114 | 73 | 10/12/2024 |
3.24.1009.115 | 81 | 10/9/2024 |
3.24.1008.160 | 70 | 10/8/2024 |
3.24.1008.133 | 79 | 10/8/2024 |
3.24.1007.185 | 75 | 10/7/2024 |
3.24.1003.33 | 87 | 10/2/2024 |
3.24.1002.162 | 90 | 10/2/2024 |
3.24.929.143 | 90 | 9/29/2024 |
3.24.929.141 | 83 | 9/29/2024 |
3.24.929.131 | 84 | 9/29/2024 |
3.24.929.122 | 73 | 9/29/2024 |
3.24.926.184 | 88 | 9/26/2024 |
3.24.926.182 | 86 | 9/26/2024 |
3.24.926.175 | 85 | 9/26/2024 |
3.24.924.160 | 74 | 9/24/2024 |
3.24.924.133 | 81 | 9/24/2024 |
3.24.924.124 | 75 | 9/24/2024 |
3.24.924.10 | 88 | 9/23/2024 |
3.24.924.1 | 80 | 9/23/2024 |
3.24.923.234 | 74 | 9/23/2024 |
3.24.923.232 | 78 | 9/23/2024 |
3.24.923.155 | 87 | 9/23/2024 |
3.24.919.92 | 83 | 9/19/2024 |
3.24.914.125 | 113 | 9/14/2024 |
3.24.914.115 | 99 | 9/14/2024 |
3.24.914.111 | 108 | 9/14/2024 |
3.24.911.95 | 99 | 9/11/2024 |
3.24.908.215 | 88 | 9/8/2024 |
3.24.904.200 | 96 | 9/4/2024 |
3.24.828.163 | 123 | 8/28/2024 |
3.24.820.173 | 115 | 8/20/2024 |
3.24.814.92 | 114 | 8/14/2024 |
3.24.812.115 | 116 | 8/12/2024 |
3.24.802.100 | 79 | 8/2/2024 |
3.24.801.162 | 95 | 8/1/2024 |
3.24.801.160 | 90 | 8/1/2024 |
3.24.801.155 | 89 | 8/1/2024 |
3.24.730.164 | 54 | 7/30/2024 |
3.24.730.91 | 61 | 7/30/2024 |
3.24.724.91 | 83 | 7/24/2024 |
3.24.718.105 | 111 | 7/18/2024 |
3.24.716.95 | 91 | 7/16/2024 |
3.24.712.94 | 86 | 7/12/2024 |
3.24.710.14 | 108 | 7/9/2024 |
3.24.709.105 | 93 | 7/9/2024 |
3.24.704.94 | 112 | 7/4/2024 |
3.24.701.90 | 107 | 7/1/2024 |
3.24.628.114 | 103 | 6/28/2024 |
3.24.627.145 | 91 | 6/27/2024 |
3.24.620.160 | 101 | 6/20/2024 |
3.24.613.115 | 92 | 6/13/2024 |
3.24.612.95 | 94 | 6/12/2024 |
3.24.528.90 | 100 | 5/28/2024 |
3.24.522.84 | 104 | 5/22/2024 |
3.24.512.213 | 95 | 5/12/2024 |
3.24.508.112 | 121 | 5/8/2024 |
2.2024.428.71 | 122 | 4/28/2024 |
2.2024.427.1128 | 119 | 4/27/2024 |
2.2.72 | 114 | 4/14/2024 |
2.2.71 | 104 | 4/12/2024 |
2.2.8 | 103 | 4/26/2024 |
2.2.6 | 106 | 4/10/2024 |
2.2.5 | 102 | 3/26/2024 |
2.2.4 | 109 | 3/25/2024 |
2.2.3 | 103 | 3/24/2024 |
2.2.2 | 125 | 3/21/2024 |
2.2.1 | 133 | 3/20/2024 |
2.2.0 | 130 | 3/13/2024 |
2.1.9 | 127 | 2/21/2024 |
2.1.8 | 107 | 2/18/2024 |
2.1.7 | 127 | 2/16/2024 |
2.1.6 | 108 | 2/14/2024 |
2.1.5 | 111 | 2/14/2024 |
2.1.4 | 132 | 2/9/2024 |
2.1.3 | 133 | 2/8/2024 |
2.1.2 | 115 | 2/5/2024 |
2.1.1.2 | 188 | 12/26/2023 |
2.1.1.1 | 131 | 12/26/2023 |
2.1.1 | 134 | 12/25/2023 |
2.1.0 | 148 | 12/17/2023 |
2.0.11 | 153 | 12/6/2023 |
2.0.1 | 176 | 11/15/2023 |
2.0.0 | 163 | 11/14/2023 |
1.9.1 | 151 | 11/1/2023 |
1.9.0 | 135 | 10/19/2023 |
1.9.0-preview2 | 110 | 10/12/2023 |
1.9.0-preview1 | 131 | 10/12/2023 |
1.8.9 | 150 | 10/11/2023 |
1.8.8 | 159 | 10/11/2023 |
1.8.7-rc2 | 102 | 9/21/2023 |
1.8.7-rc1 | 114 | 9/12/2023 |
1.8.6 | 164 | 8/31/2023 |
1.8.5 | 155 | 8/25/2023 |
1.8.4 | 153 | 8/24/2023 |
1.8.3 | 167 | 8/23/2023 |
1.8.2 | 157 | 8/22/2023 |
1.8.1 | 144 | 8/18/2023 |
1.8.0 | 171 | 8/15/2023 |
1.7.9 | 166 | 8/11/2023 |
1.7.8 | 169 | 8/11/2023 |
1.7.7 | 163 | 8/10/2023 |
1.7.6 | 156 | 8/9/2023 |
1.7.5 | 173 | 8/9/2023 |
1.7.4 | 174 | 8/3/2023 |
1.7.3 | 175 | 8/1/2023 |
1.7.2 | 173 | 7/31/2023 |
1.7.1 | 166 | 7/27/2023 |
1.7.0 | 185 | 7/27/2023 |