ObjectCache不适用于多个解决方案项目

本文关键字:解决方案 项目 不适用 适用于 ObjectCache | 更新日期: 2023-09-27 18:15:57

我有两个解决方案:

  • Soultion1中我有Console1.csproj
  • Solution2我有Console2.csproj

Solution1项目Console1.csproj中,我已经将值添加到缓存中并希望得到这些值使用Solution2我有Console2.csproj但是在Console2.csproj我得到null

In Console1.csproj

ObjectCache cache = MemoryCache.Default;
CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0);
cache.Set("mykey", "myvalue", policy);

Console2.csproj中,我试图从缓存中获取值,我得到null,为什么本地缓存不持续存在?

ObjectCache cache = MemoryCache.Default;
object mykey = cache.Get("mykey", null);

ObjectCache不适用于多个解决方案项目

您不能从应用程序的另一个实例访问缓存。要做到这一点,你需要使用appfabric或redis缓存之类的东西。现在你正在运行的缓存是"本地的",只有Console1可以访问,Console2不能访问它。它不是一个分布式缓存系统。

MemoryCache只对承载它的应用程序可用。

我建议你使用AppFabric或Redis缓存或NCache。这些是最常用的,用于允许多个源访问全局缓存。

您得到null,因为没有找到该项目:

返回值

类型:系统。对象

如果缓存项存在,则用key标识该缓存项的引用;否则,null。

MemoryCache class works per process这意味着2个不同的应用程序将有不同的缓存实例

为了在Console1Console2之间发送数据,您将需要它们使用Interprocess Communication/Sockets/等进行通信…

您可能还希望继承ObjectCache并自己实现通信层。