redis-shake2.0中list双向同步重复问题

使用redis-shake2.0双向同步的时候list的内容出现多个重复的,如何解决
例如Aredis同步到Bredis,且Bredis同步Aredis,开启同步后,
Aredis添加一个list,值为1122,
结果A、B中皆出现100个1122

出现多个重复的原因可能是 Redis-Shake 处理同步时出现了异常,导致同步数据时反复重试。这种情况下,可以尝试以下方法:

  1. 确认 Redis-Shake 版本升级到最新版,因为较老版本可能存在一些同步异常的 bug。
  2. 在同步之前,执行 CONFIG SET maxmemory-policy noeviction 命令,禁用 Redis 的淘汰策略。这是因为,在应用淘汰策略的情况下,会对 Redis-Shake 处理数据回源造成影响,进而导致同步出现问题。
  3. 在同步时增加 --sync-type rdb 参数。这个参数会将源 Redis 的 AOF 文件转换为 RDB 文件格式进行同步,这样在同步时就避免了 AOF 文件中的历史操作对数据同步造成的影响。
  4. 如果上述方法无法解决您的问题,您可以暂停 Redis 的读写操作,将 A 和 B 两个 Redis 中存在的冗余数据手动清除,清除后再次运行 Redis-Shake 同步工具即可。

不建议在同步时同时进行正向和反向的同步操作,容易造成数据冗余和数据不一致情况的出现。在进行 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