EasilyNET.MongoDistributedLock 1.9.0-preview2

This is a prerelease version of EasilyNET.MongoDistributedLock.
There is a newer version of this package available.
See the version list below for details.
dotnet add package EasilyNET.MongoDistributedLock --version 1.9.0-preview2
                    
NuGet\Install-Package EasilyNET.MongoDistributedLock -Version 1.9.0-preview2
                    
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="1.9.0-preview2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EasilyNET.MongoDistributedLock" Version="1.9.0-preview2" />
                    
Directory.Packages.props
<PackageReference Include="EasilyNET.MongoDistributedLock" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EasilyNET.MongoDistributedLock --version 1.9.0-preview2
                    
#r "nuget: EasilyNET.MongoDistributedLock, 1.9.0-preview2"
                    
#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.
#:package EasilyNET.MongoDistributedLock@1.9.0-preview2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EasilyNET.MongoDistributedLock&version=1.9.0-preview2&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=EasilyNET.MongoDistributedLock&version=1.9.0-preview2&prerelease
                    
Install as a Cake Tool
EasilyNET.MongoDistributedLock
使用方法
// 使用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);
}
  • 注意事项和工作原理
  1. 当您尝试获取锁时,具有指定 lockId 的文档将添加到锁集合中,或者更新(如果存在).
  2. 释放锁时,将更新文档,并将新文档添加到信号上限集合中
  3. 当锁定正在等待时,将使用服务器端等待的可尾游标.详细信息
  4. 生存期是锁有效的时间段.在此时间之后,锁将自动“释放”,并且可以再次获取.它可以防止死锁.
  5. 不要使用长时间的超时,这可能会引发 MongoDB 驱动程序的异常.正常超时不超过 1-2 分钟!
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  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 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.1113.100 150 11/13/2024
3.24.1112.125 124 11/12/2024
3.24.1107.140 120 11/7/2024
3.24.1107.54 128 11/7/2024
3.24.1107.34 134 11/7/2024
3.24.1105.111 130 11/5/2024
3.24.1103.31 138 11/2/2024
3.24.1103 132 11/2/2024
3.24.1031.135 124 10/31/2024
3.24.1031.112 130 10/31/2024
3.24.1031.104 128 10/31/2024
3.24.1029.142 121 10/29/2024
3.24.1025.30 135 10/24/2024
3.24.1022.142 120 10/22/2024
3.24.1018.204 183 10/18/2024
3.24.1018.175 179 10/18/2024
3.24.1018.166 166 10/18/2024
3.24.1018.93 175 10/18/2024
3.24.1017.42 128 10/16/2024
3.24.1016.161 125 10/16/2024
3.24.1015.231 120 10/15/2024
3.24.1015.14 133 10/14/2024
3.24.1012.114 127 10/12/2024
3.24.1009.115 130 10/9/2024
3.24.1008.160 118 10/8/2024
3.24.1008.133 130 10/8/2024
3.24.1007.185 124 10/7/2024
3.24.1003.33 130 10/2/2024
3.24.1002.162 136 10/2/2024
3.24.929.143 132 9/29/2024
3.24.929.141 129 9/29/2024
3.24.929.131 127 9/29/2024
3.24.929.122 118 9/29/2024
3.24.926.184 136 9/26/2024
3.24.926.182 129 9/26/2024
3.24.926.175 135 9/26/2024
3.24.924.160 122 9/24/2024
3.24.924.133 131 9/24/2024
3.24.924.124 121 9/24/2024
3.24.924.10 134 9/23/2024
3.24.924.1 125 9/23/2024
3.24.923.234 119 9/23/2024
3.24.923.232 127 9/23/2024
3.24.923.155 130 9/23/2024
3.24.919.92 126 9/19/2024
3.24.914.125 153 9/14/2024
3.24.914.115 141 9/14/2024
3.24.914.111 153 9/14/2024
3.24.911.95 147 9/11/2024
3.24.908.215 131 9/8/2024
3.24.904.200 140 9/4/2024
3.24.828.163 164 8/28/2024
3.24.820.173 157 8/20/2024
3.24.814.92 160 8/14/2024
3.24.812.115 156 8/12/2024
3.24.802.100 123 8/2/2024
3.24.801.162 143 8/1/2024
3.24.801.160 131 8/1/2024
3.24.801.155 127 8/1/2024
3.24.730.164 97 7/30/2024
3.24.730.91 102 7/30/2024
3.24.724.91 121 7/24/2024
3.24.718.105 151 7/18/2024
3.24.716.95 131 7/16/2024
3.24.712.94 134 7/12/2024
3.24.710.14 151 7/9/2024
3.24.709.105 134 7/9/2024
3.24.704.94 157 7/4/2024
3.24.701.90 145 7/1/2024
3.24.628.114 151 6/28/2024
3.24.627.145 133 6/27/2024
3.24.620.160 142 6/20/2024
3.24.613.115 131 6/13/2024
3.24.612.95 135 6/12/2024
3.24.528.90 140 5/28/2024
3.24.522.84 142 5/22/2024
3.24.512.213 135 5/12/2024
3.24.508.112 159 5/8/2024
2.2024.428.71 157 4/28/2024
2.2024.427.1128 157 4/27/2024
2.2.72 151 4/14/2024
2.2.71 141 4/12/2024
2.2.8 139 4/26/2024
2.2.6 147 4/10/2024
2.2.5 137 3/26/2024
2.2.4 145 3/25/2024
2.2.3 144 3/24/2024
2.2.2 165 3/21/2024
2.2.1 174 3/20/2024
2.2.0 165 3/13/2024
2.1.9 164 2/21/2024
2.1.8 141 2/18/2024
2.1.7 167 2/16/2024
2.1.6 146 2/14/2024
2.1.5 147 2/14/2024
2.1.4 176 2/9/2024
2.1.3 172 2/8/2024
2.1.2 154 2/5/2024
2.1.1.2 222 12/26/2023
2.1.1.1 164 12/26/2023
2.1.1 164 12/25/2023
2.1.0 180 12/17/2023
2.0.11 170 12/6/2023
2.0.1 200 11/15/2023
2.0.0 184 11/14/2023
1.9.1 172 11/1/2023
1.9.0 164 10/19/2023
1.9.0-preview2 136 10/12/2023
1.9.0-preview1 153 10/12/2023
1.8.9 175 10/11/2023
1.8.8 185 10/11/2023
1.8.7-rc2 127 9/21/2023
1.8.7-rc1 141 9/12/2023
1.8.6 199 8/31/2023
1.8.5 188 8/25/2023
1.8.4 184 8/24/2023
1.8.3 216 8/23/2023
1.8.2 193 8/22/2023
1.8.1 185 8/18/2023
1.8.0 206 8/15/2023
1.7.9 205 8/11/2023
1.7.8 209 8/11/2023
1.7.7 212 8/10/2023
1.7.6 195 8/9/2023
1.7.5 209 8/9/2023
1.7.4 213 8/3/2023
1.7.3 215 8/1/2023
1.7.2 212 7/31/2023
1.7.1 203 7/27/2023
1.7.0 221 7/27/2023