我有多个运行的Windows服务,它们位于不同的进程上,是这些进程常用的System.Runtime.Caching.MemoryCache还是每个进程的单独实例?
如果没有,是否有一个缓存机制在服务器上的.net上共享相同的缓存命名空间实例。
我不是在寻找像redis这样的分布式缓存。我想在一台服务器内共享内存缓存但是有多个进程,所以它要快得多,而不是通过网络连接到另一台服务器并获取数据,反序列化等等。
答案 0 :(得分:3)
System.Runtime.Caching.MemoryCache
仅适用于单个流程。您最好的解决方案是使用分布式缓存(如Redis,Memcache,...)和单个服务器(运行应用程序的服务器)。
C#对象不能直接在进程空间之间传递,因此不可避免地会出现某种序列化。
答案 1 :(得分:1)
MemoryCache不允许您在进程之间共享内存,因为用于缓存对象的内存绑定到应用程序池。这是您可以找到的任何内存缓存实现的本质。
实际使用共享缓存的唯一方法是使用分布式缓存。
但是,有一些方法可以在C#中共享内存,但这不再是实际的缓存。 例如,您可以使用内存映射文件,如此处sharing memory between two applications
中较早的答案所述