gpt4 book ai didi

c# - AppFabric 缓存突然过期

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:03 25 4
gpt4 key购买 nike

我目前正在测试 AppFabric 缓存,但我的缓存遇到了一个奇怪的问题。尽管我说他需要缓存一个简单的对象 3 分钟,但他只缓存了大约 3 秒。

我的缓存设置如下:

PS C:> Get-CacheConfig 默认值缓存名称:默认生存时间:100 分钟缓存类型:分区二级 : 0是否过期:真驱逐类型:LRU通知已启用:假

我使用以下 3 个 commandlet 构建了这个缓存:

Use-CacheCluster 
Start-CacheCluster
Grant-CacheAllowedClientAccount <myAccount>

然后我尝试运行以下程序 (program.cs):

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Press any key to continue, Q to quit");
while (Console.ReadKey() != new ConsoleKeyInfo('q', ConsoleKey.Q, false, false, false))
{
DoStuff();
}
}

static void DoStuff()
{
Person p = null;
DataCacheItem cacheItem = CacheUtility.CurrentCache.GetCacheItem("jebas");
if (cacheItem != null)
{
Console.WriteLine("V - Got my stuff from cache");
p = (Person)cacheItem.Value;
}

if (p == null)
{
Console.WriteLine("! - I just did an expensive call");
p = GetPerson();
CacheUtility.CurrentCache.Add("jebas", p, new TimeSpan(0, 30, 0));
}
}

private static Person GetPerson()
{
return new Person() { FirstName = "Jeroen", LastName = "Van Bastelaere", Id = Guid.NewGuid() };
}
}

CacheUtility 类:

sealed class CacheUtility
{
private static DataCacheFactory _factory;
private static DataCache _cache;
private static readonly object _lock = new object();

CacheUtility() { }

public static DataCache CurrentCache
{
get
{
lock (_lock)
{
if (_cache == null)
{
List<DataCacheServerEndpoint> servers = new List<DataCacheServerEndpoint>();
servers.Add(new DataCacheServerEndpoint("demo2010a", 22233));
DataCacheFactoryConfiguration config = new DataCacheFactoryConfiguration()
{
Servers = servers
};
_factory = new DataCacheFactory(config);
_cache = _factory.GetDefaultCache();
}
return _cache;
}
}
}
}

使用这个程序,我只是运行它并按一个随机键一段时间:大部分时间它说“我从缓存中得到它”,但每 3 秒一次它会进行一次昂贵的调用。当我检查 Get-CacheStatistics default 时他错过了缓存,他有这个:

PS C:> Get-CacheStatistics 默认值

尺寸:0项目数:0地区数:1请求数:1543小姐数:75

当它在缓存中时,它会给我这个:

尺寸:566项目数:1地区数:1请求数:1553小姐数:77

使用 perfmon 我能够知道我的对象被驱逐了,因为当我运行我的程序时计数器 Total Evicted Objects 上升(并且它突然不再在缓存中)。

我不知道为什么它被逐出,这是我目前正在缓存的唯一对象,服务器还有足够的内存剩余 (4GB+)

任何人都可以帮助我将我的对象缓存 30 分钟而不是 3 秒吗?

非常感谢您的帮助。 :-)

提前致谢

杰伦

最佳答案

When physical memory becomes low on a Windows Server AppFabric cache host, the cache host can enter a state called throttling. The cache cluster will not write data to any cache that resides on a throttled cache host until the available physical memory increases to resolve the throttled state.

http://msdn.microsoft.com/en-us/library/ff921030.aspx

;)

关于c# - AppFabric 缓存突然过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com