Skip to content

An implementation of the distributed semaphore algorithm with Redis in C#

License

Notifications You must be signed in to change notification settings

jeremylandon/DSemaphore.net

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DSemaphore.net

A distributed semaphore based on Redis.

See RedisLabs: Fair semaphores

Usage

Create a semaphore factory

DSemaphoreFactory.Create(connection)
  • connectionMultiplexer - required, Inter-related group of connections to redis servers
  • redisDatabaseId optional, The ID of the database (default -1).
var connection = ConnectionMultiplexer.Connect("127.0.0.1:6379");
using (var semaphoreFactory = DSemaphoreFactory.Create(connection))
{
  // ...
}

Create a semaphore

semaphoreFactory.CreateSemaphore(string semaphoreName, int maxCount, TimeSpan? retryTime = null)
  • semaphoreName - required, Name of the semaphore
  • maxCount - required, The number of requests for the semaphore that can be granted concurrently
  • retryTime optional, How long to wait between retries when trying to acquire a lock. (default 10ms and it cannot be less than this value)
int maxCount = 5;
await using (var semaphore = semaphoreFactory.CreateSemaphore("foo", maxCount))
{
    foreach (var entity in collection)
    {
       // ...
    }
}

Wait an acquisition

WaitAsync(TimeSpan timeout, string id = null, CancellationToken cancellationToken = default)
  • timeout - required, observation time interval, after the delay has passed the method returns false. This value is important to prevent dead acquisition requests
  • id - optional, Id of the semaphore context
  • cancellationToken optional,
var timeout = TimeSpan.FromSeconds(30);
if (await semaphore.WaitAsync(timeout))
{
    // an action ...
}

License

This project is licensed under the MIT License - see the LICENSE.md file for details

About

An implementation of the distributed semaphore algorithm with Redis in C#

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages