*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: 是的,立即生效,后续查询自动路由到新索引。