gpt4 book ai didi

AppFabric 缓存并发问题?

转载 作者:行者123 更新时间:2023-12-04 11:14:16 25 4
gpt4 key购买 nike

在对我们全新的主系统进行压力测试原型(prototype)时,我遇到了 AppFabric 缓存的并发问题。当同时使用相同的 cacheKey 调用多个 DataCache.Get() 和 Put() 时,我尝试存储相对较大的对象,我收到“ErrorCode:SubStatus:暂时失败。请稍后重试。”它可以通过以下代码重现:

        var dcfc = new DataCacheFactoryConfiguration
{
Servers = new[] {new DataCacheServerEndpoint("localhost", 22233)},
SecurityProperties = new DataCacheSecurity(DataCacheSecurityMode.None, DataCacheProtectionLevel.None),
};

var dcf = new DataCacheFactory(dcfc);
var dc = dcf.GetDefaultCache();

const string key = "a";
var value = new int [256 * 1024]; // 1MB

for (int i = 0; i < 300; i++)
{
var putT = new Thread(() => dc.Put(key, value));
putT.Start();

var getT = new Thread(() => dc.Get(key));
getT.Start();
}

当使用不同的key调用Get()或DataCache同步时,不会出现此问题。如果从 DataCacheFactory 的每次调用中获取 DataCache(DataCache 应该是线程安全的)或超时时间延长,则它不起作用并且仍然收到错误。
MS会留下这样的错误在我看来很奇怪。有没有人遇到过类似的问题?

最佳答案

我也看到了同样的行为,我的理解是这是设计使然。缓存包含两个并发模型:

  • 乐观并发模型方法: Get , Put , ...
  • 悲观并发模型: GetAndLock , PutAndLock , Unlock

  • 如果您使用乐观并发模型方法,如 Get那么你必须准备好获得 DataCacheErrorCode.RetryLater并妥善处理 - 我也使用重试方法。

    您可以在 MSDN 上找到更多信息: Concurrency Models

    关于AppFabric 缓存并发问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6859523/

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