【问题标题】:CacheManager handles with inproc and Redis as backplane is not syncedCacheManager 与 inproc 和 Redis 一起处理,因为背板未同步
【发布时间】:2018-09-21 04:26:04
【问题描述】:

我有这个使用 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 是否有什么特别之处,这意味着缓存同步不起作用?

【问题讨论】:

    标签: c# cachemanager


    【解决方案1】:

    好的,所以在对此进行更多研究后,我意识到控制台应用程序使用 CacheManager 的 1.1.2 版本,而 Web 应用程序使用 1.1.1 版本。升级后,这突然开始工作。

    因此,其他遇到此问题的人的答案是确保您在访问缓存的所有进程上使用该库的相同版本。但是,除非这是在 1.1.2 中解决的错误,否则我认为即使使用不同的版本也应该可以。毕竟是来自 redis 背板的 pubsub 保持同步......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 2021-04-29
      • 2018-06-08
      • 2013-10-25
      • 2011-05-20
      相关资源
      最近更新 更多