使用java实现从数据库查出来存redis 查的时候先查redis redis没有再读数据库的代码

发布于:2025-02-13 ⋅ 阅读:(114) ⋅ 点赞:(0)

您可以使用Java的Jedis库来操作Redis,并结合JDBC来操作数据库,实现从数据库查询数据并存入Redis的过程。以下是一个简单的示例代码:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DatabaseToRedis {
    // Redis连接池
    private static JedisPool jedisPool;

    public static void main(String[] args) {
        // 初始化Redis连接池
        initRedis();

        // 查询数据
        String data = getDataFromRedisOrDatabase("yourKey");

        System.out.println("Data: " + data);

        // 关闭Redis连接
        jedisPool.close();
    }

    // 从Redis或数据库获取数据
    private static String getDataFromRedisOrDatabase(String key) {
        Jedis jedis = jedisPool.getResource();
        String data = jedis.get(key);
        jedis.close();

        if (data == null) {
            // 从数据库中获取数据
            data = getDataFromDatabase(key);

            // 将数据存入Redis
            if (data != null) {
                jedis = jedisPool.getResource();
                jedis.set(key, data);
                jedis.close();
            }
        }

        return data;
    }

    // 从数据库中查询数据
    private static String getDataFromDatabase(String key) {
        String url = "jdbc:mysql://localhost:3306/yourDatabase";
        String username = "yourUsername";
        String password = "yourPassword";

        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            String query = "SELECT data FROM yourTable WHERE key = ?";
            PreparedStatement statement = connection.prepareStatement(query);
            statement.setString(1, key);
            ResultSet resultSet = statement.executeQuery();

            if (resultSet.next()) {
                return resultSet.getString("data");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return null;
    }

    // 初始化Redis连接池
    private static void initRedis() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(10); // 最大连接数
        jedisPoolConfig.setMaxIdle(5); // 最大闲置连接数

        String host = "localhost";
        int port = 6379;
        String password = "yourRedisPassword";
        
        jedisPool = new JedisPool(jedisPoolConfig, host, port);
        
        // 如果Redis有密码需要验证
        Jedis jedis = jedisPool.getResource();
        if (password != null && !password.isEmpty()) {
            jedis.auth(password);
        }
        jedis.close();
    }
}

请根据您的具体数据库和Redis配置修改对应的连接信息。这个示例中,在查询数据时会先访问Redis,如果Redis中没有对应的数据,则从数据库中读取数据并存入Redis,以便下次查询时直接从Redis获取数据。


网站公告

今日签到

点亮在社区的每一天
去签到