我在两台服务器上有我的网站代码,我想要它们之间的共享缓存,所以我使用的是 Microsoft AppFabric。我只希望缓存中有一个项目——不是每个站点访问者一个项目,总共只有一个项目。
我用来尝试完成此操作的代码如下,但是,它没有按照我想要的方式工作。我认为问题在于缓存中有很多项目,尽管它们都具有相同的密钥。但这可能是正在发生的其他事情。有关详细信息,请参阅代码注释。
在Web.config
:
<dataCacheClient>
<hosts>
<host name="MyHost1" cachePort="22233"/>
<host name="MyHost2" cachePort="22233"/>
</hosts>
<securityProperties mode="None" protectionLevel="None" />
</dataCacheClient>
...
<system.web>
<sessionState mode="InProc" customProvider="AppFabricCacheSessionStoreProvider">
<providers>
<add
name="AppFabricCacheSessionStoreProvider"
type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider"
cacheName="MyCache"
sharedId="MySharedApp"/>
</providers>
</sessionState>
...
</system.web>
在Global.asax.cs
:
private static DataCacheFactory _cacheFactory = new DataCacheFactory();
private static DataCache _cache;
private void RegisterCacheEntry(){
try
{
// Set up cache
_cache = _cacheFactory.GetCache("MyCache");
// Prevent duplicate key addition
if (_cache.GetCacheItem(CacheItemKey) != null || _cache.Get(CacheItemKey) != null)
return;
// Add item to cache
_cache.Add(CacheItemKey, CacheItem, TimeSpan.FromMinutes(10));
// When the cache item is removed, the callback:
// 1) sends me an email
// 2) adds the same item with the same key to the cache again.
// So I SHOULD be getting one email every 10 minutes.
// However, it starts with one, but the number of emails that I get increases every 10 minutes.
// i.e., I get one email at time t=0, two emails at t=1, three at t=2, then four, etc.
_cache.AddItemLevelCallback(CacheItemKey, DataCacheOperations.RemoveItem, CacheItemRemovedCallback);
}
catch (Exception e){}
}
如果您想了解有关我在做什么以及为什么要执行此操作的更多信息,我正在尝试使用此处所述的缓存超时来模拟 Windows 服务。但我试图让它在两台服务器上工作。