使用redis-shake2.0双向同步的时候list的内容出现多个重复的,如何解决
例如Aredis同步到Bredis,且Bredis同步Aredis,开启同步后,
Aredis添加一个list,值为1122,
结果A、B中皆出现100个1122
出现多个重复的原因可能是 Redis-Shake 处理同步时出现了异常,导致同步数据时反复重试。这种情况下,可以尝试以下方法:
CONFIG SET maxmemory-policy noeviction
命令,禁用 Redis 的淘汰策略。这是因为,在应用淘汰策略的情况下,会对 Redis-Shake 处理数据回源造成影响,进而导致同步出现问题。--sync-type rdb
参数。这个参数会将源 Redis 的 AOF 文件转换为 RDB 文件格式进行同步,这样在同步时就避免了 AOF 文件中的历史操作对数据同步造成的影响。不建议在同步时同时进行正向和反向的同步操作,容易造成数据冗余和数据不一致情况的出现。在进行 Redis-Shake 的同步时,建议使用单向同步模式,即只进行 A 到 B 的同步或者 B 到 A 的同步,
这种情况可能是因为在两个redis中,相互同步的操作导致的。 解决这种问题的方法包括:
1.使用不同的key来避免冲突。 在Aredis中添加一个list时,可以在key上添加A前缀,如"A:list",在Bredis中添加相同的list时,可以在key上添加B前缀,如"B:list"。 这样可以确保在Aredis中添加的list不会与Bredis中的list重复。
禁用双向同步,只进行单向同步。 由于在双向同步中,每次的操作都会相互同步,因此可能存在重复添加的情况。 如果只开启单向同步,则只会从Aredis同步到Bredis或从Bredis同步到Aredis,但不会出现相互同步导致的重复添加问题。
使用redis中的事务,确保操作只进行一次。 在添加list时,可以使用redis中的事务,将添加操作作为一个整体进行提交。 这样可以确保操作只进行一次,避免出现重复添加的情况。
问题点:同步时,数据重复
解决方案:
修改redis-shake.conf,key_exists = rewrite
当源和目的有重复 key 时是否进行覆写, 可选值:
1. rewrite: 源端覆盖目的端
2. none: 一旦发生进程直接退出
3. ignore: 保留目的端key,忽略源端的同步 key. 该值在 rump 模式下不会生效.
我的环境是从两套redis主从之间同步数据,配置文件如下(删减过部分默认配置)
conf.version = 1
id = redis-shake
log.file = /opt/redis-shake/redis-shake.log
log.level = info
pid_path =
system_profile = 9310
http_profile = 9320
parallel = 32
source.type = standalone
source.address = 10.26.31.172:6379
source.password_raw =
source.auth_type = auth
source.tls_enable = false
source.rdb.input =
source.rdb.parallel = 0
source.rdb.special_cloud =
target.type = standalone
target.address = 10.26.29.235:6389
target.password_raw =
target.auth_type = auth
target.db = 0
key_exists = rewrite
filter.db.whitelist = 0