5

我一直在阅读有关从 .Net Framework 4.0 开始的新 MemoryCache 类的信息。根据我的阅读,您可以跨不同的 .Net 应用程序访问 MemoryCache。我正在尝试在 Asp.Net 应用程序和标准 Windows 窗体 .Net 应用程序之间共享一个对象。如果我将对象添加到 .Net 应用程序中的 MemoryCache,Asp.Net 应用程序看不到它。有没有办法做到这一点?感谢您的宝贵时间,非常感谢。

Windows 窗体应用程序:

    Dim cache As ObjectCache = MemoryCache.Default
    Dim policy As New CacheItemPolicy()
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(60)
    cache.Set("testcache", TestObj, policy)

ASP.NET 应用程序:

    Dim cache As ObjectCache = MemoryCache.Default
    If IsNothing(cache("testcache")) Then Response.Write("TestCache Is Nothing")

谢谢 - 瑞安

4

4 回答 4

6

不,那是不可能的。MemoryCache不是分布式缓存解决方案。所以它只能在本地使用。

如果您正在寻找分布式缓存替代方案,您可能需要查看AppFabricRedis

但是,以这种方式共享缓存听起来确实有点像一个奇怪的架构。也许公开一个共享服务层,asp.net 和 winforms 都使用,并且只让服务实现缓存似乎更合乎逻辑(考虑到我实际上对您要解决的问题一无所知,所以我可以错误的)。

出于性能原因,缓存更常用,而不是作为在应用程序之间共享数据的一种方式。

于 2013-03-09T19:58:34.687 回答
1

MySQL 内存表运行良好并且具有出色的性能。20/30 插入一秒,CPU 负载只有 1% 左右。

于 2013-03-22T19:13:17.347 回答
1

我意识到这个建议并不及时,但对于阅读这个问题的其他人来说,另一种可能性是两个程序之间的进程间通信 (IPC)。这样,两个程序可以直接交换消息/数据,而无需通过中间程序。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx

从上面的文档中,这里有一些选项。

剪贴板 COM 数据复制 DDE 文件映射 邮槽 管道 RPC Windows 套接字

在您的情况下,映射内存文件可能是最好的方法,因为它允许应用程序之间共享内存空间。从根本上说,您的 MySql/Redis 方法可能并没有那么不同。

于 2016-05-03T19:17:16.340 回答
0

如果您有兴趣: 单服务器多个应用程序 - 内存共享 ,您应该考虑在同一节点创建 Web api 并使用它(简单的键值 API)并使用 .net 框架提供的简单内存缓存

多台服务器 - 内存共享免费 $$ 解决方案

  1. 您可以使用“分布式 SQL Server 缓存”,允许分布式缓存使用 SQL Server 数据库作为其后备存储。要在 SQL Server 实例中创建 SQL Server 缓存项表,可以使用 sql-cache 工具。该工具使用您指定的名称和架构创建一个表。

  2. 如果您有一个节点集群,您可以使用 NCache,它是在 .NET 和 .NET Core 中本地开发的开源内存分布式缓存。NCache 既可以在本地工作,也可以配置为在 Azure 或其他托管平台上运行的 ASP.NET Core 应用程序的分布式缓存群集。

需要付费的解决方案:前面提到的 NCache,有Professional和Enterprise的解决方案,或者 Redis Cache ——Redis是一个开源的内存数据存储,通常用作分布式缓存。可以为 Azure 托管的 ASP.NET Core 应用配置 Azure Redis 缓存,并使用 Azure Redis 缓存进行本地开发。

于 2021-06-27T11:48:39.570 回答