Using Redis in Dotnet
From Logic Wiki
Docker
docker run --name my-redis -p 6379:6379 -d redis
To run redis cli :
docker exec -it my-redis sh
redis-cli
some commands
- ping
- select 0
- dbsize
- scan 0
Nuget Packages
- Microsoft.Extensions.Caching.StackExchangeRedis
- StackExchange.Redis
Startup.cs
in ConfigureServices
services.AddStackExchangeRedisCache(options =>
{
options.Configuration = Configuration.GetConnectionString("Redis");
options.InstanceName = "SignAPI_";
});
Appsettings.json
"ConnectionStrings": {
"Redis": "localhost:6379"
},
Extension
- Create Extension folder
- Create DistributedCacheExtensions.cs in it
public static class DistributedCacheExtensions
{
public static async Task SetRecordAsyns<T>(this IDistributedCache cache,
string recordId,
T data,
TimeSpan? absoluteExpireTime = null,
TimeSpan? unusedExpireTime = null)
{
var options = new DistributedCacheEntryOptions();
options.AbsoluteExpirationRelativeToNow = absoluteExpireTime ?? TimeSpan.FromSeconds(60);
options.SlidingExpiration = unusedExpireTime; // if it's not used for a while expire the cache
var jsonData = JsonSerializer.Serialize(data);
await cache.SetStringAsync(recordId, jsonData, options);
}
public static async Task<T> GetRecordAsync<T>(this IDistributedCache cache, string recordId)
{
var jsonData = await cache.GetStringAsync(recordId);
if(jsonData is null)
{
return default(T);
}
return JsonSerializer.Deserialize<T>(jsonData);
}
}