Documented the distributed lock for the Redis Provider

pull/11867/head
malik masis 3 years ago
parent 34c89d2900
commit 6bd0c4bc0c

@ -0,0 +1,72 @@
# Distributed Lock
Distributed locks are very useful to manage many processes that request the same object.
They are used to handle conflict between these requests. Once obtaining anyone it, the others need to wait till give up free.
# Providers
`MedallionAbpDistributedLock`
Distributed locks system provides an abstraction that can be implemented by any vendor/provider.
ABP depends on [DistributedLock.Core](https://www.nuget.org/packages/DistributedLock.Core) library which provides a distributed locking system for concurrency control in a distributed environment. There are [many distributed lock providers](https://github.com/madelson/DistributedLock#implementations) including Redis, SqlServer and ZooKeeper. You may use the one you want. Here, I will show the Redis provider.
This provider contains a method named TryAcquireAsync and this method returns null if the lock could not be handled.
> Name is a mandatory field. It keeps the locked provider name.
> Timeout is set as default. If it fells deadlock and doesn't work properly you can use define the time to kill it.
>CancellationToken is set as default. It enables cooperative cancellation between threads, thread pool work items, or Task objects
Also, you should add [DistributedLock.Redis](https://www.nuget.org/packages/DistributedLock.Redis) NuGet package to your project, then add the following code into the ConfigureService method of your ABP module class.
````csharp
using Medallion.Threading;
using Medallion.Threading.Redis;
namespace AbpDemo
{
public class MyModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
//the other configurations
var configuration = context.Services.GetConfiguration();
context.Services.AddSingleton<IDistributedLockProvider>(sp =>
{
var connection = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]);
return new RedisDistributedSynchronizationProvider(connection.GetDatabase());
});
}
}
}
````
Also, you should add your Redis configuration in appsetting.json
````json
"Redis": {
"Configuration": "127.0.0.1"
}
````
> To use in APB, you should download the below NuGet package.
It already contains DistributedLocking.Abstractions and no need to download as well.
````powershell
Install-Package Volo.Abp.DistributedLocking -Version 5.1.4
````
````csharp
using Volo.Abp.DistributedLocking;
namespace AbpDemo
{
public class MyService : ITransientDependency
{
private readonly IAbpDistributedLock _distributedLock;
public MyService(IAbpDistributedLock distributedLock)
{
_distributedLock = distributedLock;
}
await using (var handle = await _distributedLock.TryAcquireAsync("NameOfLock"))
{
if (handle != null)
{
//your code
}
}
````

@ -300,6 +300,10 @@
"text": "Data Seeding",
"path": "Data-Seeding.md"
},
{
"text": "Distributed Lock",
"path": "Distributed-Lock.md"
},
{
"text": "Email Sending",
"items": [

Loading…
Cancel
Save