Redis集群环境下Search索引与对应数据同节点部署方案咨询
Redis Search集群中索引与数据同节点部署解决方案
问题背景
我们使用Redis Search作为向量数据库,部署了6节点(3主3从)的Redis Stack集群。数据按分组划分,每个分组创建多个索引以实现快速搜索。当前存在的问题是:索引创建在单个节点,但对应的数据分散在所有节点,仅能搜索到索引所在节点上的数据。
已尝试方案
按照Redis官方建议,使用{}语法强制数据归至单节点,示例命令:
HSET key_{abc}_doc <value>
所有包含{abc}的键会因共享相同哈希槽,存储在同一节点。
可行解决方案
要实现索引与对应数据部署在同一节点,需确保索引本身的哈希槽与对应数据键的哈希槽一致,具体操作如下:
索引名称绑定相同哈希槽标识
创建索引时,将索引名称也加入相同的分组标识{},确保索引键与数据键落在同一哈希槽。示例命令:FT.CREATE idx_{abc} ON HASH PREFIX 1 "key_{abc}_doc"这里
idx_{abc}作为索引键,其哈希槽由{abc}决定,与数据键key_{abc}_doc的哈希槽完全一致,因此索引和对应数据会部署在同一节点。验证哈希槽一致性
可通过以下命令确认数据键与索引键的哈希槽是否相同:CLUSTER KEYSLOT "key_{abc}_doc" CLUSTER KEYSLOT "idx_{abc}"若返回值相同,则说明两者已在同一节点。
统一分组标识规范
为每个数据分组分配唯一的标识(如abc、def),该分组下的所有数据键、索引键都统一使用{分组标识}包裹,确保整个分组的索引与数据完全落在同一节点。负载均衡注意事项
避免将大量分组绑定到同一标识,防止单个节点负载过高。需合理分配分组标识,均衡各主节点的哈希槽负载,保证集群性能稳定。
内容的提问来源于stack exchange,提问作者Ali Hamza
相关产品推荐
相关产品推荐

