gpt4 book ai didi

c# - C# 上的 Redis Hash 在 WCF 服务中非常慢

转载 作者:IT王子 更新时间:2023-10-29 06:15:45 25 4
gpt4 key购买 nike

我是 Redis 的新手,开始尝试使用 Redis 哈希来存储一些对象,但我遇到了一些非常意外的性能问题。我在本地托管在 vmware player 上的 Ubuntu 机器上运行 redis。

我的虚拟机是两个内核和 4 GB 内存。

这是我正在尝试的代码。

using (var redis = new RedisClient())
{
using (var client = redis.As<MyClass>())
{
var hash = client.GetHash<Guid>("urn:class");
var items = hash.Values;
}
}

哈希包含从我们的实体模型添加的大约 2000 个项目。在我的运行过程中,从哈希中获取所有值需要 7 秒,这似乎太高了,即使对于我实例中的 Redis 硬件来说也是如此。对相同数据的正常 LINQ to Entity 查询需要 0.25 秒。

我在这里做错了什么吗?考虑到我听说过的所有关于 Redis 性能的好消息,这似乎是错误的。

编辑:2013 年 7 月 12 日

这似乎是一个 WCF 问题。此帖Using Redis to Scale Web Services基本上反射(reflect)了我的结果。我做的测试是这样的。

检索包含 1683 个对象的 Redis 哈希

  • IIS 中的 WCF 服务:7 秒
  • ASP.NET Web API:0.8 秒
  • NodeJS 仅供娱乐:0.8 秒

Web Api 和 Node 运行得非常棒,接近我运行 redis-benchmark 时的水平。

最佳答案

我的问题是我用作 Redis 客户端上下文的类。该类是使用带有对象上下文的旧版本 Entity Framework 生成的实体模型。生成实体的方式导致 ServiceStack.Redis 客户端必须做大量工作来反序列化从 Redis 返回的对象。实体导航属性的设置方法调用

初始化相关集合()

每次 json 解析器必须反序列化通过 Redis 客户端返回的对象时都会调用它。切换到一个没有导航属性的更简单的对象效果很好,并将时间恢复到我预期的数字,这与我的其他测试一致。

我没有看到 ASP.NET Web API 变慢的原因是实体是使用新的 DbContext 模型生成的,而 ServiceStack 中的 Json 序列化程序几乎不需要做它所做的工作量在 WCF 项目中,因为导航属性只是简单的列表或集合。

首先让实体对象成为 Redis 客户端的类型可能不是一个好主意。

关于c# - C# 上的 Redis Hash 在 WCF 服务中非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17603838/

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