使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取

简介: 使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取

以下是使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取的示例代码:

首先,确保已经引入了Redis的Java客户端依赖,例如Jedis:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>

接下来,我们需要创建一个RedisUtil类,用于连接Redis并提供操作方法:

import redis.clients.jedis.Jedis;

public class RedisUtil {
   
    private static final String REDIS_HOST = "localhost";
    private static final int REDIS_PORT = 6379;

    private static Jedis jedis;

    public static Jedis getJedis() {
   
        if (jedis == null) {
   
            jedis = new Jedis(REDIS_HOST, REDIS_PORT);
        }
        return jedis;
    }

    public static void set(String key, String value) {
   
        getJedis().set(key, value);
    }

    public static String get(String key) {
   
        return getJedis().get(key);
    }

    public static void close() {
   
        if (jedis != null) {
   
            jedis.close();
        }
    }
}

然后,我们需要创建一个Dao类,用于从数据库中读取数据,并将数据存入Redis:

import java.sql.*;

public class DataDao {
   
    private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase";
    private static final String DB_USER = "root";
    private static final String DB_PASSWORD = "password";

    public static String getDataFromDatabase(String key) {
   
        String data = RedisUtil.get(key);
        if (data == null) {
   
            data = fetchDataFromDatabase(key);
            if (data != null) {
   
                RedisUtil.set(key, data);
            }
        }
        return data;
    }

    private static String fetchDataFromDatabase(String key) {
   
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        String data = null;
        try {
   
            conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
            stmt = conn.createStatement();
            String sql = "SELECT data FROM mytable WHERE key = '" + key + "'";
            rs = stmt.executeQuery(sql);
            if (rs.next()) {
   
                data = rs.getString("data");
            }
        } catch (SQLException e) {
   
            e.printStackTrace();
        } finally {
   
            if (rs != null) {
   
                try {
   
                    rs.close();
                } catch (SQLException e) {
   
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
   
                try {
   
                    stmt.close();
                } catch (SQLException e) {
   
                    e.printStackTrace();
                }
            }
            if (conn != null) {
   
                try {
   
                    conn.close();
                } catch (SQLException e) {
   
                    e.printStackTrace();
                }
            }
        }
        return data;
    }
}

最后,我们可以在主程序中调用Dao类的方法进行测试:

public class Main {
   
    public static void main(String[] args) {
   
        String key = "mykey";
        String data = DataDao.getDataFromDatabase(key);
        System.out.println(data);
        RedisUtil.close();
    }
}

在上述示例中,我们首先尝试从Redis中获取数据,如果获取失败,则从数据库中查询数据,并将查询到的数据存入Redis中,以便下次查询时直接从Redis中获取数据。在关闭程序之前,需要调用RedisUtil.close()方法关闭Redis连接。

请根据实际情况修改示例中的数据库连接信息和查询语句来适配您的应用场景。

相关文章
|
11月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
11月前
|
人工智能 Java 关系型数据库
使用数据连接池进行数据库操作
使用数据连接池进行数据库操作
268 11
|
11月前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
452 4
|
11月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
653 16
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
算法 Java 数据库连接
面试疑难点解析——Java数据库开发(九)
本文主要教大家区分悲观锁与乐观锁,帮助大家巩固Java开发性相关知识,提高面试通过率。
面试疑难点解析——Java数据库开发(九)
|
监控 算法 druid
面试疑难点解析——Java数据库开发(八)
本文向同学们介绍数据源的配置以及数据随机抽取方法,帮助大家巩固Java开发性相关知识,提高面试通过率。
|
NoSQL Java 关系型数据库
面试疑难点解析——Java数据库开发(七)
本文介绍事务处理的四个特性:ACID,以及开发中可能见到的事务处理模式。
|
Java 数据库连接 数据库
面试疑难点解析——Java数据库开发(六)
本文通过案例向同学们阐明检测数据库更新的两个误区以及连接池实现原理。
面试疑难点解析——Java数据库开发(六)

相关产品

  • 云数据库 Tair(兼容 Redis)