面试题答案
一键面试- 停止写入操作:
- 在迁移数据之前,在源实例上停止所有写入操作。这可以通过在应用层面暂时停止对源Redis实例执行写命令,或者使用Redis的
CONFIG SET
命令将appendonly
设置为no
来阻止新数据写入AOF日志(仅适用于AOF持久化模式),防止在迁移过程中有新数据写入导致数据不一致。
- 在迁移数据之前,在源实例上停止所有写入操作。这可以通过在应用层面暂时停止对源Redis实例执行写命令,或者使用Redis的
- 使用
MIGRATE
命令:MIGRATE
命令有多个参数,其中COPY
选项可以在目标实例创建一份数据副本,而源实例的数据依然保留。这样即使迁移过程中出现问题,源实例的数据也不会丢失,保证了数据的安全性和一致性。例如:MIGRATE <host> <port> <key> 0 <destination-db> [COPY] [REPLACE] [KEYS <key> ...]
。REPLACE
选项会在目标实例上覆盖已存在的键,确保目标实例的数据与源实例一致。如果不使用REPLACE
,当目标实例中已存在相同键时,迁移会失败,从而可能导致数据不一致。
- 验证数据一致性:
- 迁移完成后,使用
DBSIZE
命令对比源实例和目标实例中数据库的键数量,确保迁移的数据量一致。例如在源实例执行DBSIZE
,在目标实例执行相同命令,对比结果。 - 对关键数据进行校验和计算,例如对某个哈希表或列表中的所有元素计算哈希值。在源实例和目标实例分别计算,对比哈希值是否一致。
- 可以使用Redis的
DEBUG OBJECT
命令获取键的详细信息,如编码方式、引用计数等,对比源实例和目标实例中相同键的这些信息是否一致。
- 迁移完成后,使用
- 恢复写入操作:
- 在确认数据一致性后,在源实例恢复写入操作。如果之前通过
CONFIG SET appendonly no
阻止了AOF写入,此时要将其设置回yes
。在应用层面重新开启对源Redis实例的写操作。
- 在确认数据一致性后,在源实例恢复写入操作。如果之前通过