redis数据导出到oracle数据库

请教各位老师,redis数据导出到oracle数据库,如何实现。
具体业务场景和需求:redis有一张表,记录用户编号,用户状态,oracle也有一相同表。因redis更新,导致oracle的表数据 和redis表数据不一致。现在想先将redis数据导出到insert到oracle表,然后进行比对。至于redis数据和oracle如何保持一致,后面再想方案。
谢谢各位老师指导。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/651865
  • 你也可以参考下这篇文章:Redis与Oracle
  • 除此之外, 这篇博客: Redis与Oracle中的 Redis与其他key-value存储有什么不同? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

    • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

    做几个小实验:

    1. 通过开发语言实现,将oracle中超过100万以上的查询结果,插入到list中。
    2. 计算从执行查询到完全插入到list里面所消耗的时间。
    3. 安装redis数据库(定义端口号:6666  密码:ILOVEXH)。
    4. 通过您熟悉的开发语言连接redis数据库。
    5. 将第三步的list结果插入到redis数据库(计算插入list时间)。
    6. 从redis里面读取list(计算读取list时间)。

    第1题:

    第一步:配置文件,jar包:ojdbc6(连接oracle的驱动)和jedis(连接redis数据库的驱动))

    一下方法都在OracleService类里

    1. Connection connect = null;  
    2.     PreparedStatement st = null;  
    3.     ResultSet rs = null;  
    4.     private static Jedis rd = null;   
    5.    public static List<String> list=new ArrayList<String>();  
    6.     private static String USERNAMR = "STD2017";  
    7.     private static String PASSWORD = "STD20171QAZ";  
    8.     private static String DRVIER = "oracle.jdbc.OracleDriver";  

        private static String URL = "jdbc:oracle:thin:@地址:端口:xe"

    第二步:连接:

    1.  public Connection gc() {  
    2.         try {  
    3.             //第一步:注册驱动  
    4.             //第一种方式:类加载(常用)  
    5.             //Class.forName("oracle.jdbc.OracleDriver");  
    6.             //第二种方式:利用Driver对象  
    7.             Driver driver = new OracleDriver();  
    8.             DriverManager.deregisterDriver(driver);  
    9.             //第二步:获取连接  
    10.             //第一种方式:利用DriverManager(常用)  
    11.             //connect = DriverManager.gc("jdbc:oracle:thin:@localhost:1521:XE", "你的oracle数据库用户名", "用户名密码");  
    12.             connect = DriverManager.getConnection(URL, USERNAMR, PASSWORD);  
    13. //            System.out.println("success to oracle_server");  
    14.             System.out.println("成功连接服务器");  
    15.         } catch (Exception e) {  
    16.             e.printStackTrace();  
    17.         }  
    18.         return connect;  
    19.     }  

    第三步:执行查询

    1. public void SelectData() {    
    2.        connect = gc();    
    3.        String sql = "select * from YYZZJJ where 1=1";    //这个YYZZJJ表在oracle数据表有一百万条数据
    4.        try {    
    5.            st = connect.prepareStatement(sql);    
    6.            rs = st.executeQuery();    
    7.            int i=1;    
    8.            while (rs.next()) {    
    9.                String name = rs.getString("NAME");    
    10.                i++;    
    11. //      println(name+" "+i);
    12.            }    
    13.        } catch (SQLException e) {    
    14.            e.printStackTrace();    
    15.        } finally {    
    16.            ReleaseResource();    
    17.        }    
    18.    }    

    第四步:直接插入到list,第三步只是测试用

    1.  public void AddToList(){  
    2.         connect=gc();  
    3.         String sql="select * from YYZZJJ where 1=1";  
    4.   
    5.         try {  
    6.             st = connect.prepareStatement(sql);  
    7.             rs = st.executeQuery();  
    8.             //int i=1;  
    9.             while (rs.next()) {  
    10.                 //String name = rs.getString("NAME");  
    11.                 list.add(rs.getString("NAME"));  
    12.             }  
    13.             System.out.println("完成");  
    14.         } catch (SQLException e) {  
    15.             e.printStackTrace();  
    16.         } finally {  
    17.             ReleaseResource();  
    18. //执行完后,释放资源
    19.         }  
    20.     }  

    第五步:释放资源

    1. public void ReleaseResource() {  
    2.         if (rs != null) {  
    3.             try {  
    4.                 rs.close();  
    5.             } catch (SQLException e) {  
    6.                 e.printStackTrace();  
    7.             }  
    8.         }  
    9.         if (st != null) {  
    10.             try {  
    11.                 st.close();  
    12.             } catch (SQLException e) {  
    13.                 e.printStackTrace();  
    14.             }  
    15.         }  
    16.         if (connect != null) {  
    17.             try {  
    18.                 connect.close();  
    19.             } catch (SQLException e) {  
    20.                 e.printStackTrace();  
    21.             }  
    22.         }  
    23.         if(rd!=null){  
    24.                 rd.shutdown();  
    25.         }  
    26.     }  

    第2题:so easy

            OracleService oo=new OracleService();
    1.        long startTime = System.currentTimeMillis();    //获取开始时间  
    2.        oo.AddToList();
    3.        long endTime = System.currentTimeMillis();    //获取结束时间  
    4.       System.out.println("从查询到添加到list运行时间:" + (endTime - startTime) + "ms");    //输出程序运行时间  

    第3题

    下载redis,

    https://github.com/MSOpenTech/redis/releases

    在redis的根目录,打开redis.windows.conf改端口(port)和requirepass(密码)

    最后在docs命令下redis-server redis.windows.conf

    打开另一个docs界面

     

    第4题:连接语句

    1. public void Get_Connect_Redis(){  
    2.        try {  
    3.            rd = new Jedis("127.0.0.1",6666);  
    4.            rd.auth("ILOVEXH");  //密码连接
    5.            System.out.println("成功连接redis服务器");  
    6.        }catch (Exception e){  
    7.            e.printStackTrace();  
    8.        }  
    9.    }  

    第5题:

    第一步:取出来在插入到list

    1. public void AddToRedis(OracleService oracle){  
    2.         Get_Connect_Redis();  
    3.         for(int i=1;i<oracle.list.size();i++){  
    4.             rd.lpush("czh",oracle.list.get(i));  
    5.         }  
    6.     }  

    第二步:
    计算时间:

    1. long startTime2 = System.currentTimeMillis();  
    2. oo.AddToRedis(oo);  
    3. long endTime2 = System.currentTimeMillis();  
    4. System.out.println("将list放到redis的时间:" + (endTime2 - startTime2) + "ms");    //输出程序运行时间  

    第6题:

    第一步:取出数据

    1. public void Select_Date_from_Redis(OracleService oracle){  
    2.         Get_Connect_Redis();  
    3.         rd.lrange("czh",0,oracle.list.size());  
    4.         }  

    第二步:计算时间

    1.      long startTime3 = System.currentTimeMillis();  
    2.       oo.Select_Date_from_Redis(oo);  
    3.       long endTime3= System.currentTimeMillis();  
    4.       System.out.println("从redis读取list:" + (endTime3 - startTime3) + "ms");    //输出程序运行时间  

     

    运行截图


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^