wpf - ServiceStack Redis 搜索很慢。如何优化?

标签 wpf elasticsearch redis servicestack.redis

我正在使用 ServiceStack.Redis 来实现一个演示项目。它包含两个 POCO,即专辑和歌曲。

下面是使用秒表实例测量的搜索结果:

Time elapsed searching 5804 items is 00:00:00.1243984 <-- Albums
Time elapsed searching 138731 items is 00:00:02.0592068 <-- Songs

如您所见,搜索歌曲花费了太多时间。我在 WPF 应用程序中显示结果,其中还输入了搜索词。滞后是 redis 的禁区。

下面是用于搜索的代码:

IEnumerable<int> songsFromRedis =
    songRedis.GetAll()
    .Where(song => song.Title != null 
        &&  song.Title.ToLowerInvariant().Contains(searchText))
    .OrderBy(song => song.Title)
    .Select(x => x.AlbumId);

如果我们不能让它更快,ElasticSearch 会有帮助吗?

最佳答案

问题在于您如何使用 Redis,即 songRedis.GetAll() 下载整个数据集,将所有实体反序列化为 C# 对象并在客户端执行搜索。

您永远不应该在客户端(即任何数据存储)上通过网络下载和查询整个数据集,即使是完整的服务器端表扫描查询也会执行得更好,因为只有过滤后的结果会返回给客户端,并且不是整个数据集。理想情况下,甚至应该避免完整的服务器端表扫描,并且应该通过索引进行任何查询。

Redis 不支持内置索引,但需要时您可以使用 SET to manually create indexes between entities in Redis .

关于wpf - ServiceStack Redis 搜索很慢。如何优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27023692/

相关文章:

wpf - 如何限制 <Border> 元素的宽度和高度等于其内部内容?

c# - WPF 按钮背景 mouseenter 和离开不按预期工作

mysql - 当其中一个发生变化时,我应该每次都用 redis 更新缓存吗

c# - 如何允许在 MessageBox 上复制消息

wpf - 不允许对 TextBox 进行双击鼠标操作

elasticsearch - 如何在Elasticsearch中按 “nested”哈希值排序

elasticsearch - ElasticSearch查询未返回数组的完全匹配

linux - 如何在终端CentOS 中开始使用ElasticSearch?

php - 如何清除redis中键的值

scala - 将 SSE 与 Redis 发布/订阅和 Akka Streams 一起使用的最简单方法是什么?