Using Redis in Dotnet

From Logic Wiki
Jump to: navigation, search


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);
        }
    }