public void Register(ICacheStack cacheStack) { if (IsRegistered) { throw new InvalidOperationException($"{nameof(RedisRemoteEvictionExtension)} can only be registered to one {nameof(ICacheStack)}"); } IsRegistered = true; Subscriber.Subscribe(RedisChannel) .OnMessage(async(channelMessage) => { string cacheKey = channelMessage.Message; var shouldEvictLocally = false; lock (FlaggedRefreshesLockObj) { shouldEvictLocally = FlaggedRefreshes.Remove(cacheKey) == false; } if (shouldEvictLocally) { for (var i = 0; i < EvictFromLayers.Length; i++) { await EvictFromLayers[i].EvictAsync(cacheKey); } } }); }
public async ValueTask OnValueRefreshAsync(string cacheKey, TimeSpan timeToLive) { lock (FlaggedRefreshesLockObj) { FlaggedRefreshes.Add(cacheKey); } await Subscriber.PublishAsync(RedisChannel, cacheKey, CommandFlags.FireAndForget); }