phoenix850121 2018-12-03 03:47 采纳率: 14.3%
浏览 905

redis数据导出到oracle数据库

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

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-25 19:29
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 帮你找了个相似的问题, 你可以看下: 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");    //输出程序运行时间  

       

      运行截图


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

报告相同问题?

悬赏问题

  • ¥15 Pwm双极模式H桥驱动控制电机
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题