java实现史上最简单的redis数据同步~~大佬轻喷

今天又是摸鱼的一天,突然想到后续一个任务中需要使用生产redis数据,得想点办法把生产的redis搞下来。。。。

虽然网上的redis数据同步方案有很多,但是都太高端了,总想满足使用需求就行了,于是。。。

思路如下:

  1. 扫描生产redis的key,PS:一般的jedis的连接工具都支持

  1. get生产环境数据

  1. set到开发环境

不出所料,要踩坑,直接用get,set会触发WRONGTYPE,因为数据类型的原因

查看源码,发现有dump,与restore方法(序列化与反序列化)

尝试

宾果,成功了!!

源码如下:



import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.util.Set;

@Component("redisSyncTask")
public class RedisSyncTask {
    /**
     * raw_data_prd表数据同步
     * 生产表名称:raw_data_prd
     * 本地表名称:raw_data_prd
     */
    public void sync(Integer prdDbIndex,Integer devDbIndex) {
        RedisConnection prdConn= this.getPrdRedis(prdDbIndex);
        RedisConnection devConn=this.getDevRedis(devDbIndex);
        Set<byte[]> keys= prdConn.keys("*".getBytes(StandardCharsets.UTF_8));
        keys.forEach(key->{
            byte[] value=prdConn.dump(key);
            System.out.println("key="+new String(key));
            devConn.restore(key,0l,value);
        });
    }
    public RedisConnection getPrdRedis(int prdDbIndex){
        //单机模式
        RedisStandaloneConfiguration rsc = new RedisStandaloneConfiguration();
        rsc.setPort(6379);
        rsc.setPassword("XXX");
        rsc.setHostName("XXX");
        rsc.setDatabase(prdDbIndex);
        JedisConnectionFactory fac = new JedisConnectionFactory(rsc);
        fac.afterPropertiesSet();
        RedisConnection redisConnection=fac.getConnection();
        return redisConnection;
    }
    public RedisConnection getDevRedis(int devDbIndex){
        //单机模式
        RedisStandaloneConfiguration rsc = new RedisStandaloneConfiguration();
        rsc.setPort(6379);
        rsc.setPassword("XXX");
        rsc.setHostName("XXX");
        rsc.setDatabase(devDbIndex);
        JedisConnectionFactory fac = new JedisConnectionFactory(rsc);
        fac.afterPropertiesSet();
        RedisConnection redisConnection=fac.getConnection();
        return redisConnection;
    }
    public static void main(String[] args) {
        RedisSyncTask redisSyncTask=new RedisSyncTask();
        redisSyncTask.sync(11,8);

    }

    

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值