跨 Azure 中的多个实例刷新内存缓存

问题描述 投票:0回答:1

我有一个使用内存缓存的 Azure Web 应用程序,添加密钥如下

    public static void Add(object item, string key)
    {
        var wrapper = new CacheItemWrapper()
        {
            InsertedAt = DateTime.Now,
            Item = item
        };
        MemoryCache.Default.Add(key, wrapper, ObjectCache.InfiniteAbsoluteExpiration);
    }

我们的应用程序的用户有时会做出需要刷新缓存的更改。我可以调用一个清除缓存的方法,问题是,它仅适用于接收请求的实例。其他实例在内存中仍然保留旧值。

有什么办法我可以做这两件事吗

a) 跨多个实例运行一个方法,或者 b) 引发一个所有实例都会监听的事件?

上面的代码可以更改为在短时间内过期,以便所有实例都可以选择此代码。但是,更新缓存的过程相当长,这可能会影响性能。鉴于应用程序知道何时需要刷新缓存,如果可以通过编程方式完成,效果会更好且响应更快。

azure web-applications
1个回答
0
投票

我知道这是一个五年多前的老问题了。但这仍然是人们可能会遇到的一个用例。 最近遇到类似的要求。

团队中某人(比我更聪明)提出的解决方案是包含一个像 Redis/ServiceBus 这样的消息代理,并让应用程序实例监听它。

一旦代理上有新消息,所有应用程序服务实例都会收到通知,并且它们可以通过实现来处理通知以清除整个缓存或特定键。

© www.soinside.com 2019 - 2024. All rights reserved.