我使用 CacheManager ( https://github.com/MichaCo/CacheManager )有这个场景:
- 1 个控制台应用程序(使用 inproc 缓存句柄 + Redis 缓存句柄作为背板)
- 1 个 ASP.NET MVC Web 应用程序(使用 inproc 缓存句柄 + Redis 缓存句柄作为背板)
控制台应用程序和 ASP.NET MVC 应用程序的缓存配置是相同的:
var configuration = ConfigurationBuilder.BuildConfiguration(settings =>
{
settings
.WithSystemRuntimeCacheHandle("InProc")
.And
.WithRedisConfiguration("redis", config =>
{
config.WithAllowAdmin()
.WithDatabase(0)
.WithEndpoint("localhost", 6379);
})
.WithMaxRetries(1000)
.WithRetryTimeout(100)
.WithRedisBackplane("redis")
.WithRedisCacheHandle("redis", true);
});
ICacheManager<string> cache = (ICacheManager<string>)CacheFactory.FromConfiguration(typeof(string), configuration);
但是,当我像这样从控制台应用程序执行简单的缓存失效时:
cache.Remove("Key")
它不会从 Web 应用程序的 inproc 缓存句柄中删除。我已经尝试并创建了 2 个具有与上述相同配置的不同控制台应用程序,这就像预期的那样工作(当其中一个控制台应用程序使缓存中的密钥无效时,它也会从另一个控制台应用程序的所有缓存句柄中删除)。
当与 Web 应用程序和控制台应用程序一起使用时,使用 CacheManager 是否有什么特别之处,这意味着缓存同步不起作用?