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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Tair(兼容Redis),内存型 2GB
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
简介: 使用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连接。

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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
9 1
|
5天前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
21 2
|
11天前
|
SQL Java OLAP
java实现“数据平滑升级”
java实现“数据平滑升级”
31 2
|
15天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
12天前
|
SQL Java OLAP
java实现“数据平滑升级”
java实现“数据平滑升级”
8 0
|
14天前
|
存储 NoSQL Java
Java 使用 Redis
10月更文挑战第22天
22 0
|
3天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
14 4
|
26天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
58 3
Mysql(4)—数据库索引
|
11天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
51 2
|
14天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
61 4

相关产品

  • 云数据库 Tair(兼容 Redis)
  • 下一篇
    无影云桌面