加速我的简单Redis .NET应用程序

3

我开始编写一个应用程序,希望能够快速搜索我的数据。

我开始使用来自ServiceStack.Redis的客户端。(通过NuGet获取)

在此基础上,我编写了一个小测试应用程序,插入了20k个公司数据记录,现在我正在使用以下代码查询这个东西:

using (var companies = redisClient.As<Company>())
{
  var companiesFound = companies.GetAll().Where(x => x.CompanyName.Contains(searchString));
  dgvOutput.DataSource = companiesFound.ToList<Company>();
}

我使用的 Company 类如下所示:

public class Company
{
  public long Id { get; set; }
  public string CompanyName { get; set; }
  public string CompanyAddress { get; set; }
  public string CompanyCity { get; set; }
}

所有的功能都能够正常运行,但是速度并不理想。是否有人可以帮我提供一些方法,让它的运行速度更快?创建索引?使用不同类型的查询?最好不要使用LINQ?


你尝试直接查询数据库了吗?如果是,你是否遇到了相同的性能问题?当查询需要很长时间时,这与你的代码无关... - Dannydust
是的,我非常确定这与我的代码有关。控制台应用程序速度更快。所以我的问题是,如何编写更智能的查询来通过Redis搜索我的公司对象。 - Tys
嗯,对我来说似乎你是提前获取了公司的所有记录,然后再进行筛选: “companies.GetAll().Where(...” 你需要 GetAll() 这个调用吗? - Dannydust
这就是我的问题所在,我找不到任何关于如何使用这个 Redis .NET 客户端的手册或参考资料。 - Tys
1个回答

4
我找到了这份文档:https://github.com/ServiceStack/ServiceStack.Redis/wiki/IRedisClient,但它不是一个Linq提供程序。
我没有找到一种方法来获取经过筛选的公司,你只能获取全部或者通过ID获取一个。

所以我认为,在开始时,您需要获取所有公司信息,并将其存储在应用程序缓存中,可能是在应用程序启动时进行。

companies =  redisClient.As<Company>().GetAll();

然后您可以像以前一样使用Linq2Objects过滤列表:

var companiesFound = companies.Where(x => x.CompanyName.Contains(searchString));
  dgvOutput.DataSource = companiesFound;

我不确定你是否需要ToList调用。 希望有人能给你一个更好的解决方案。

我找到了一个关于使用 Redis 客户端的好的解释和概述: http://www.codeproject.com/Articles/388982/Document-Databases-A-look-at-them - Dannydust

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接