首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c#异步中使用Redis缓存后的高CPU使用率

在c#异步中使用Redis缓存后的高CPU使用率
EN

Stack Overflow用户
提问于 2017-04-06 13:06:53
回答 1查看 2K关注 0票数 2

我正在使用https://github.com/StackExchange/StackExchange.Redis。(StackExchang.Redis.StrongName.1.2.1)

我有这样一个异步函数,它会使CPU达到100%,并在服务400个请求后4-5分钟开始获得超时错误。

代码语言:javascript
复制
 public async Task<T> GetOrSetAsync<T>(string cacheKey, Func<Task<T>> getItemCallback) where T : class
         {
             T item = null;
             IDatabase cache = Connection.GetDatabase();
             var cacheValue = await cache.StringGetAsync(cacheKey);
            if (cacheValue.IsNull)
            {
                item = await getItemCallback();
                await cache.StringSetAsync(cacheKey, JsonConvert.SerializeObject(item));
            }
            else
            {
                item = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<T>(cacheValue));
            }
             return item;
         }

如果停止使用redis缓存并从DB返回直接值,则可以在2分钟20秒内执行1300请求的负载。CPU高,仍能完成负载。

代码语言:javascript
复制
 public async Task<T> GetOrSetAsync<T>(string cacheKey, Func<Task<T>> getItemCallback) where T : class
         {
            return await getItemCallback();
         }

如果我只是将下面的函数修改为getDatabase而什么也不做。它使CPU立即达到100%,并在2分钟内在200次请求后被卡住,这是因为CPU较高。

代码语言:javascript
复制
 public async Task<T> GetOrSetAsync<T>(string cacheKey, Func<Task<T>> getItemCallback) where T : class
         {
           IDatabase cache = Connection.GetDatabase();
            return await getItemCallback();
         }

但是问题是,为什么CPU使用量只随着

IDatabase缓存= Connection.GetDatabase();?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-07 18:37:16

您的“连接”属性是如何实现的?它是否在每个电话中创建了一个与Redis的新连接?如果是这样,就不建议这样做。您应该在您的电话中共享一个连接。

代码语言:javascript
复制
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
    return ConnectionMultiplexer.Connect("<your connection string here>");
});

public static ConnectionMultiplexer Connection
{
    get
    {
        return lazyConnection.Value;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43256135

复制
相关文章

相似问题

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