使用 Redis 查询引擎从开发转移到生产
将带有 Redis 查询引擎 (RQE) 的 Redis 社区版环境从开发环境过渡到生产环境,需要仔细考虑配置、性能调整和资源分配。本指南概述了确保您的 Redis 部署在生产工作负载下以最佳方式运行的关键实践。
配置参数注意事项
RQE 提供了几个影响查询结果和性能的可配置参数。虽然可以在此处找到这些参数及其功能的完整列表,但本节重点介绍生产环境最常调整的参数。
1.TIMEOUT
- 目的:限制允许执行查询的持续时间。
- 默认值:500 毫秒。
- 行为:
- 确保查询不会垄断 Redis 主线程。
- 如果查询超过
TIMEOUT
值,则其结果由ON_TIMEOUT
设置:FAIL
:查询将返回错误。PARTIAL
:此设置将返回查询累积的排名靠前的结果,直到超时。
- 建议:
- 注意:增加时要注意
TIMEOUT
,因为长时间运行的查询会降低整体系统性能。
- 注意:增加时要注意
2.MINPREFIX
- 用途:设置通配符搜索所需的最小字符数。
- 默认值:2 个字符。
- 行为:
- 像
he*
有效,而h*
不会达到阈值。
- 像
- 建议:
- 将此值降低到 1 可以显著增加结果集,这可能会导致性能下降。
- 除非存在单字符通配符的强大用例,否则请保留默认值。
3.MAXPREFIXEXPANSIONS
- 目的:定义通配符查询词的最大扩展数。
- 默认值:200 个扩展。
- 行为:
- 扩展:处理通配符查询词时,Redis 会从索引中生成满足通配符的所有可能匹配项的列表。例如,查询 he* 可能会扩展为 hello、hero 和 heat 等术语。这些匹配项中的每一个都是一个 “扩展”。
- 此参数限制 Redis 将生成和处理的扩展数量。如果可能的匹配项数超过限制,则查询可能会返回不完整的结果或失败,具体取决于查询上下文。
- 建议:
- 避免过度增加此参数,因为它可能会导致查询执行期间出现性能瓶颈。
- 如果通配符搜索很常见,请考虑优化索引以减少对大型通配符扩展的依赖。
4.DEFAULT_DIALECT
- 目的:指定
FT.SEARCH
和FT.AGGREGATE
命令。 - 默认值:Dialect 1。
- 建议:
- 将默认值更新为 Dialect 4 以获得更好的性能和访问高级功能。
- 如有必要,单个命令可以覆盖此参数,但设置更高的默认值可确保查询之间的性能一致。
测试
1. 正确性
- 运行一些测试查询并检查结果是否符合您的预期。
- 使用以下工具进行验证和调试:
- Redis CLI:使用
MONITOR
命令或 Redis Insight 中的分析功能来分析命令。 FT.PROFILE
:提供对单个查询执行路径的详细见解,帮助识别瓶颈和低效率。
- Redis CLI:使用
2. 性能
- 在尽可能接近生产环境的受控测试环境中测试查询性能。
- 使用如下工具
memtier_benchmark
或自定义测试应用程序以模拟负载。 - 网络注意事项:
- 通过将测试客户端放置在与 Redis 实例相同的网络中,最大限度地减少测试期间的延迟。
- 对于 Redis Cloud,请确保测试计算机与目标 Redis 数据库位于 VPC 对等环境中。
大小调整要求
Redis Search 的资源要求与一般缓存使用案例不同。适当的大小可确保系统能够高效处理生产工作负载。
关键注意事项:
- 中央处理器:
- 足够的 CPU 资源至关重要。
- 确保 CPU 不会因搜索线程和分片进程而超额订阅。
- 公羊:
- 规划足够的内存来存储数据集和索引,以及作开销。
- 网络:
- 高吞吐量和低延迟至关重要,尤其是对于具有苛刻查询模式的应用程序。
工具:
- 使用 Redis 搜索大小计算器 根据您的数据集和工作负载估算资源需求。
需求高峰
生产环境的大小必须针对峰值负载场景进行调整,以确保在最大压力下性能保持可接受。
建议:
- 针对尖峰的计划:
- 如果预计查询工作负载会有很大差异,请确保基础设施可以处理峰值负载。
- 监控实际使用模式并根据需要调整容量。
- 自动缩放:
- 考虑在云环境中使用自动扩展策略,以根据负载动态调整资源。
通过遵循这些最佳实践,您可以确保使用 Redis 社区版和 RQE 从开发平稳高效地过渡到生产环境。正确的配置、严格的测试和仔细的资源规划对于提供可靠和高性能的 Redis 部署至关重要。