У меня есть код моего сайта на двух серверах, и мне нужен общий кэш между ними, поэтому я использую Microsoft AppFabric. Я только хочу, чтобы в кеше был один элемент - не один элемент для каждого посетителя сайта, всего одна вещь.Почему у меня есть несколько элементов кэша в кеше 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 с помощью тайм-аут кэша как описано here. Но я пытаюсь заставить это работать на двух серверах.
Я удалил весь раздел '', но, похоже, ничего не изменил. У меня все еще есть несколько элементов. –
Kalina
Откуда вы знаете, что есть несколько предметов? вы используете командлет PS-Get-Statistics? – Cybermaxs
Я просто предполагал, что это несколько элементов кеша. У меня нет доступа к PowerShell и я не могу проверить; но что еще может быть проблема? Один элемент кэша истекает несколько раз? – Kalina