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

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Tair(兼容Redis),内存型 2GB
简介: 使用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
相关文章
|
1月前
|
XML Java 数据库连接
性能提升秘籍:如何高效使用Java连接池管理数据库连接
在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
59 5
|
29天前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
41 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
18天前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
26 6
|
25天前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
35 8
|
16天前
|
SQL JavaScript 程序员
数据库LIKE查询屡试不爽?揭秘大多数人都忽视的秘密操作符!
本文分析了因数据库中的不可见空白字符导致的数据查询问题,探讨了问题的成因与特性,并提出了使用 SQL 语句修复问题的有效方案。同时,总结了避免类似问题的经验和注意事项。
27 0
|
1月前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
37 2
|
1月前
|
存储 缓存 关系型数据库
怎么让数据库查询更快
【10月更文挑战第25天】通过以上综合的方法,可以有效地提高数据库查询的速度,提升应用程序的性能和响应速度。但在优化过程中,需要根据具体的数据库系统、应用场景和数据特点进行合理的调整和测试,以找到最适合的优化方案。
|
23天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
251 1
|
1月前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
24 0

相关产品

  • 云数据库 Tair(兼容 Redis)
  • 下一篇
    DataWorks