You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redis跨库迁移时MIGRATE命令报NOKEY错误,求问题原因

问题原因及解决方法

核心问题

你使用的MIGRATE命令格式有误,KEYS参数后面必须明确指定要迁移的键名列表,而你只写了KEYS却没有跟具体的键,Redis无法识别要迁移哪些键,因此抛出NOKEY错误。

正确的实现方式

因为你要迁移DB1中的所有键,不能直接在MIGRATE里空写KEYS,可以通过以下两种方式实现:

方式1:结合KEYS命令生成键列表(适合数据量小的场景)

先在DB1中执行KEYS *获取所有键,然后把这些键作为参数传给MIGRATE:

# 先切换到DB1
SELECT 1
# 获取所有键并拼接成MIGRATE命令(示例,实际可根据客户端调整)
MIGRATE localhost 6380 "" 2 50000 AUTH my_password COPY KEYS $(redis-cli -n 1 KEYS *)

注意:KEYS *在数据量大的Redis实例中会阻塞服务,生产环境不建议用。

方式2:使用SCAN命令分批迁移(适合生产环境)

通过SCAN迭代所有键,分批执行MIGRATE,避免阻塞:

# 初始化游标为0
cursor=0
while true; do
  # 从DB1扫描一批键,每次100个
  result=$(redis-cli -n 1 SCAN $cursor COUNT 100)
  # 解析游标和键列表
  cursor=$(echo $result | awk '{print $1}')
  keys=$(echo $result | cut -d' ' -f2-)
  # 如果有键则执行迁移
  if [ -n "$keys" ]; then
    redis-cli -n 1 MIGRATE localhost 6380 "" 2 50000 AUTH my_password COPY KEYS $keys
  fi
  # 游标为0时结束循环
  if [ "$cursor" -eq 0 ]; then
    break
  fi
done

补充说明

  • COPY参数确保迁移后DB1中的键不会被删除,符合你的需求。
  • AUTH my_password要确保目标Redis实例(localhost:6380)的密码正确,否则会迁移失败。

内容的提问来源于stack exchange,提问作者kaushalendra pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:50:48