*Redis FT.ALIASUPDATE 命令

FT.ALIASUPDATE 将 RediSearch 索引别名原子性地指向另一个索引,实现零停机切换。


*语法

FT.ALIASUPDATE alias index

*参数说明

参数 类型 必填 说明
alias String 要更新的别名
index String 新的目标索引名称

*返回值

  • OK:别名更新成功
  • Error:索引不存在或别名不存在

*时间复杂度

O(1)

*

*示例

*基本用法

> FT.CREATE idx:products_v1 ON HASH PREFIX 1 product: SCHEMA name TEXT
OK
> FT.ALIASADD products idx:products_v1
OK
> FT.CREATE idx:products_v2 ON HASH PREFIX 1 product: SCHEMA name TEXT price NUMERIC
OK
> FT.ALIASUPDATE products idx:products_v2
OK
> FT.SEARCH products "phone"
1) (integer) 1
2) "product:1"
3) 1) "name"
   2) "smartphone"
   3) "price"
   4) "599"

*索引重建切换

> FT.CREATE idx:articles_v2 ON HASH PREFIX 1 article: SCHEMA title TEXT content TEXT
OK
> FT.ALIASUPDATE articles idx:articles_v2
OK
> FT.DROPINDEX idx:articles_v1
OK

*常见错误

错误 原因 解决
Index not found 新索引不存在 确认目标索引已创建
Alias not found 别名不存在 先用 FT.ALIASADD 创建别名

*最佳实践

  • 索引重建/升级时使用 ALIASUPDATE 实现零停机切换
  • 操作顺序:创建新索引 → 数据同步 → ALIASUPDATE → 删除旧索引
  • 应用代码始终使用别名,不直接引用索引版本名

*FAQ

Q1: FT.ALIASUPDATE 和 FT.ALIASADD + FT.ALIASDEL 有什么区别? A: ALIASUPDATE 是原子操作,无中间状态;ADD + DEL 两步操作存在竞态窗口。

Q2: 更新别名时旧索引还在吗? A: 还在,数据不受影响,仅别名指向关系变更。旧索引可手动删除。

Q3: 可以原子切换多个别名吗? A: 一次只能更新一个别名,多个别名需多次调用。

Q4: 切换别名后查询会立即生效吗? A: 是的,立即生效,后续查询自动路由到新索引。