Пример #1
0
        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);
                    }
                }
            });
        }
Пример #2
0
        public async ValueTask OnValueRefreshAsync(string cacheKey, TimeSpan timeToLive)
        {
            lock (FlaggedRefreshesLockObj)
            {
                FlaggedRefreshes.Add(cacheKey);
            }

            await Subscriber.PublishAsync(RedisChannel, cacheKey, CommandFlags.FireAndForget);
        }