请教各位老师,redis数据导出到oracle数据库,如何实现。
具体业务场景和需求:redis有一张表,记录用户编号,用户状态,oracle也有一相同表。因redis更新,导致oracle的表数据 和redis表数据不一致。现在想先将redis数据导出到insert到oracle表,然后进行比对。至于redis数据和oracle如何保持一致,后面再想方案。
谢谢各位老师指导。
redis数据导出到oracle数据库
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 不知道你这个问题是否已经解决, 如果还没有解决的话:- 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/651865
- 你也可以参考下这篇文章:Redis与Oracle
- 除此之外, 这篇博客: Redis与Oracle中的 Redis与其他key-value存储有什么不同? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
-
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
-
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
做几个小实验:
- 通过开发语言实现,将oracle中超过100万以上的查询结果,插入到list中。
- 计算从执行查询到完全插入到list里面所消耗的时间。
- 安装redis数据库(定义端口号:6666 密码:ILOVEXH)。
- 通过您熟悉的开发语言连接redis数据库。
- 将第三步的list结果插入到redis数据库(计算插入list时间)。
- 从redis里面读取list(计算读取list时间)。
第1题:
第一步:配置文件,jar包:ojdbc6(连接oracle的驱动)和jedis(连接redis数据库的驱动))
一下方法都在OracleService类里
- Connection connect = null;
- PreparedStatement st = null;
- ResultSet rs = null;
- private static Jedis rd = null;
- public static List<String> list=new ArrayList<String>();
- private static String USERNAMR = "STD2017";
- private static String PASSWORD = "STD20171QAZ";
- private static String DRVIER = "oracle.jdbc.OracleDriver";
private static String URL = "jdbc:oracle:thin:@地址:端口:xe";
第二步:连接:
- public Connection gc() {
- try {
- //第一步:注册驱动
- //第一种方式:类加载(常用)
- //Class.forName("oracle.jdbc.OracleDriver");
- //第二种方式:利用Driver对象
- Driver driver = new OracleDriver();
- DriverManager.deregisterDriver(driver);
- //第二步:获取连接
- //第一种方式:利用DriverManager(常用)
- //connect = DriverManager.gc("jdbc:oracle:thin:@localhost:1521:XE", "你的oracle数据库用户名", "用户名密码");
- connect = DriverManager.getConnection(URL, USERNAMR, PASSWORD);
- // System.out.println("success to oracle_server");
- System.out.println("成功连接服务器");
- } catch (Exception e) {
- e.printStackTrace();
- }
- return connect;
- }
第三步:执行查询
- public void SelectData() {
- connect = gc();
- String sql = "select * from YYZZJJ where 1=1"; //这个YYZZJJ表在oracle数据表有一百万条数据
- try {
- st = connect.prepareStatement(sql);
- rs = st.executeQuery();
- int i=1;
- while (rs.next()) {
- String name = rs.getString("NAME");
- i++;
- // println(name+" "+i);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- ReleaseResource();
- }
- }
第四步:直接插入到list,第三步只是测试用
- public void AddToList(){
- connect=gc();
- String sql="select * from YYZZJJ where 1=1";
- try {
- st = connect.prepareStatement(sql);
- rs = st.executeQuery();
- //int i=1;
- while (rs.next()) {
- //String name = rs.getString("NAME");
- list.add(rs.getString("NAME"));
- }
- System.out.println("完成");
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- ReleaseResource();
- //执行完后,释放资源
- }
- }
第五步:释放资源
- public void ReleaseResource() {
- if (rs != null) {
- try {
- rs.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if (st != null) {
- try {
- st.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if (connect != null) {
- try {
- connect.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if(rd!=null){
- rd.shutdown();
- }
- }
第2题:so easy
OracleService oo=new OracleService();
- long startTime = System.currentTimeMillis(); //获取开始时间
- oo.AddToList();
- long endTime = System.currentTimeMillis(); //获取结束时间
- 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题:连接语句
- public void Get_Connect_Redis(){
- try {
- rd = new Jedis("127.0.0.1",6666);
- rd.auth("ILOVEXH"); //密码连接
- System.out.println("成功连接redis服务器");
- }catch (Exception e){
- e.printStackTrace();
- }
- }
第5题:
第一步:取出来在插入到list
- public void AddToRedis(OracleService oracle){
- Get_Connect_Redis();
- for(int i=1;i<oracle.list.size();i++){
- rd.lpush("czh",oracle.list.get(i));
- }
- }
第二步:
计算时间:- long startTime2 = System.currentTimeMillis();
- oo.AddToRedis(oo);
- long endTime2 = System.currentTimeMillis();
- System.out.println("将list放到redis的时间:" + (endTime2 - startTime2) + "ms"); //输出程序运行时间
第6题:
第一步:取出数据
- public void Select_Date_from_Redis(OracleService oracle){
- Get_Connect_Redis();
- rd.lrange("czh",0,oracle.list.size());
- }
第二步:计算时间
- long startTime3 = System.currentTimeMillis();
- oo.Select_Date_from_Redis(oo);
- long endTime3= System.currentTimeMillis();
- 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 第三方库的版本对照问题