.netcachingredisstackexchange.redis

How to implement auto-refresh with Redis cache


MemoryCache has a Set method that lets me specify a delegate that is called before a cache entry is removed from the cache via the CacheItemPolicy parameter.

This can be used to auto refresh the cache at regular intervals without employing Hangfire or some other task runner.

How can I implement this in .NET using StackExchange.Redis ?

I have not been able to find any methods in the Redis command reference that would suit my purpose and all the implementations of ObjectCache that I have found online throw a NotSupportedException in their implementations:

https://github.com/justinfinch/Redis-Object-Cache/blob/master/src/RedisObjectCache/RedisCache.cs https://www.leadtools.com/help/sdk/v20/dh/to/azure-redis-cache-example.html https://github.com/Azure/aspnet-redis-providers/pull/72/commits/2930ede272fe09abf930208dfe935c602c1bb510


Solution

  • There is no such thing built in Redis.

    But, Redis does support keyspace notifications which provides a way to register for Expired event. You can register a client that will react on such event and refresh the cache.

    Another option is to use RedisGears and register on expired--> register(eventTypes=['exired']) event such that each time an expire event is triggered your function that runs embedded in Redis will refresh the data.