首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Redis取回多个钥匙时死锁

从Redis取回多个钥匙时死锁
EN

Stack Overflow用户
提问于 2016-07-11 19:19:32
回答 0查看 598关注 0票数 1

我试图并行地将此查询的结果发送到redis (使用stackexchange C#客户端),但不知何故我在死锁中运行,并且不确定在哪里

检索数据的方法:

代码语言:javascript
复制
public LiveData Get(string sessionId)
{
    return GetAsync(sessionId).Result;
}

private async Task<LiveData> GetAsync(string sessionId)
{
    var basketTask = GetBasketAsync(sessionId);
    var historyTask = GetHistoryAsync(sessionId);
    var capturedDataTask = GetCapturedDataAsync(sessionId);

    var basket = await basketTask;
    var history = await historyTask;
    var capturedData = await capturedDataTask;

    return new LiveData
    {
        Basket = basket.IsNullOrEmpty
            ? new List<Product>()
            : JsonConvert.DeserializeObject<List<Product>>(basket),
        History = history.Select(cachedProduct
            => JsonConvert.DeserializeObject<Product>(cachedProduct.Value.ToString())).ToList(),
        CapturedData = capturedData.ToDictionary<HashEntry, string, object>(
            hash => hash.Name, hash => JsonConvert.DeserializeObject(hash.Value))
    };
}

从redis中获取缓存数据的方法如下:

代码语言:javascript
复制
private async Task<RedisValue> GetBasketAsync(string key)
{
    key = $"{key}{BasketSuffix}";
    var redisDb = RedisConnection.Connection.GetDatabase();
    redisDb.KeyExpireAsync(key, _expire);

    return await redisDb.StringGetAsync(key);
}

private async Task<HashEntry[]> GetHistoryAsync(string key)
{
    key = $"{key}{HistorySuffix}";
    var redisDb = RedisConnection.Connection.GetDatabase();
    redisDb.KeyExpireAsync(key, _expire);

    return await redisDb.HashGetAllAsync(key);
}

private async Task<HashEntry[]> GetCapturedDataAsync(string key)
{
    key = $"{key}{CapturedDataSuffix}";
    var redisDb = RedisConnection.Connection.GetDatabase();
    redisDb.KeyExpireAsync(key, _expire);

    return await redisDb.HashGetAllAsync(key);
}

我认为这样调用KeyExpireAsync很好,只是因为可以触发和忘记,但不确定这是否可能相关(我甚至尝试删除它,但它仍然被阻止)

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38305645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档