美文网首页
问题三:如何把redis的数据同步到MySQL

问题三:如何把redis的数据同步到MySQL

作者: shuff1e | 来源:发表于2019-08-15 21:28 被阅读0次

问题三:如何把redis的数据同步到MySQL?
解决:
使用开源的redis同步工具:https://github.com/leonchen83/redis-replicator
例如 如下代码:

package com.couchbase.devguide;

import com.moilioncircle.redis.replicator.RedisReplicator;
import com.moilioncircle.redis.replicator.Replicator;
import com.moilioncircle.redis.replicator.cmd.Command;
import com.moilioncircle.redis.replicator.cmd.impl.SetCommand;
import com.moilioncircle.redis.replicator.event.Event;
import com.moilioncircle.redis.replicator.event.EventListener;
import com.moilioncircle.redis.replicator.event.PostRdbSyncEvent;
import com.moilioncircle.redis.replicator.io.RawByteListener;
import com.moilioncircle.redis.replicator.rdb.dump.datatype.DumpKeyValuePair;

import java.io.*;
import java.util.concurrent.atomic.AtomicInteger;

public class redis {
    public static void main(String[] args) throws Exception {
        final OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("a.aof")));
        final RawByteListener rawByteListener = new RawByteListener() {
            public void handle(byte... rawBytes) {
                try {
                    out.write(rawBytes);
                } catch (IOException ignore) {
                }
            }
        };

        //save 1000 records commands
        Replicator replicator = new RedisReplicator("redis://127.0.0.1:6379?authPassword=123456");
        final AtomicInteger acc = new AtomicInteger(0);
        replicator.addEventListener(new EventListener() {
            public void onEvent(Replicator replicator, Event event) {
                if (event instanceof PostRdbSyncEvent) {
                    replicator.addRawByteListener(rawByteListener);
                }
                if (event instanceof SetCommand) {
                    System.out.println(new String(((SetCommand) event).getValue()));
                    if (acc.incrementAndGet() == 10) {
                        try {
                            out.close();
                            replicator.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        });

        replicator.open();

        //check aof file
        replicator = new RedisReplicator("redis:./a.aof");
        replicator.addEventListener(new EventListener() {
            public void onEvent(Replicator replicator, Event event) {
                System.out.println(event);
            }
        });
        replicator.open();
    }
}

相关文章

网友评论

      本文标题:问题三:如何把redis的数据同步到MySQL

      本文链接:https://www.haomeiwen.com/subject/yiwtsctx.html