【发布时间】:2018-08-20 14:38:50
【问题描述】:
我正在处理缓存一些可以重复使用的数据库值的要求。但我希望同一服务器中的所有处理器都可以访问缓存。
概述:
所以基本上,会有多个处理器从 API 获取工作并将记录处理到数据库。其中一些数据库值将被缓存。
处理器将是多个 Windows 服务,我希望它们共享相同的缓存。 如何使用 Ncache 来实现。我对使用它很陌生。因此,非常感谢任何链接或方向。
【问题讨论】:
我正在处理缓存一些可以重复使用的数据库值的要求。但我希望同一服务器中的所有处理器都可以访问缓存。
概述:
所以基本上,会有多个处理器从 API 获取工作并将记录处理到数据库。其中一些数据库值将被缓存。
处理器将是多个 Windows 服务,我希望它们共享相同的缓存。 如何使用 Ncache 来实现。我对使用它很陌生。因此,非常感谢任何链接或方向。
【问题讨论】:
NCache最大的价值在于可以作为OutProc分布式内存缓存,缓存驻留在NCache进程本身;这与InProc 缓存不同,后者的访问权限仅限于单个进程。
您需要配置一个OutProc 缓存,该缓存运行在单独的专用缓存服务器(或集群)或与您的服务相同的服务器上。
有关OutProc 和InProc 缓存的更多信息,请参阅http://www.alachisoft.com/resources/docs/ncache/admin-guide/local-cache.html。
安装 NCache 服务器后,您可以通过修改默认位于 C:\Program Files\NCache\config 的 config.ncconf 文件来创建缓存配置。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<cache-config cache-name="MyOutProcCacheName">
<cache-settings inproc="False">
<logging enable-logs="True" trace-errors="True" trace-debug="False" log-path=""/>
<performance-counters enable-counters="True" snmp-port="0"/>
<cache-notifications item-remove="False" item-add="False" item-update="False"/>
<cleanup interval="15sec"/>
<storage type="heap" cache-size="2024mb"/>
<eviction-policy default-priority="normal" eviction-ratio="5%"/>
<cache-topology topology="local-cache"/>
<client-death-detection enable="False" grace-interval="60sec"/>
</cache-settings>
</cache-config>
</configuration>
上面的配置会在本地服务器上创建一个OutProc缓存(见cache-topology)。如果需要,可以将其配置为集群环境中的各种镜像、分区或复制缓存(请参阅http://www.alachisoft.com/resources/docs/ncache/admin-guide/cache-topologies.html)。
然后您可以启动NCache 服务,并从您的应用程序中连接到该服务,并在上述配置中初始化与命名缓存实例的连接。
Cache outProcCache = NCache.InitializeCache("MyOutProcCacheName");
您还可以通过将配置参数发送到上述InitializeCache 方法,完全在代码中而不是client.ncconf 文件中配置与NCache 服务器/服务的连接。
CacheInitParams connectionParams = new CacheInitParams();
connectionParams.ServerList = new CacheServerInfo[]{ new CacheServerInfo("ncacheIp", ncachePort) };
Cache outProcCache = NCache.InitializeCache("MyOutProcCacheName", connectionParams);
【讨论】: