首页 > 数据库 >mysql与redis数据测试

mysql与redis数据测试

时间:2024-03-17 15:29:41浏览次数:23  
标签:数据测试 String rs redis System jedis student mysql name

题目要求

1.新建一张user表,在表内插入10000条数据。
2.①通过jdbc查询这10000条数据,记录查询时间。
②通过redis查询这10000条数据,记录查询时间。
3.再次查询这一万条数据,要求根据年龄进行排序,mysql和redis各实现一次。
4.上面排序后的前5人可进行抽奖,每人有一次抽奖机会,抽奖奖品随意设计,抽奖方式通过redis实现。

1.环境准备

  1. 准备相关依赖,当前项目为Maven项目,方便导入依赖。

测试junit,mysql-jdbc驱动,jedis

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.hsc</groupId>  
  <artifactId>maven_java1</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>war</packaging>
  <properties> 
    <maven.compiler.source>17</maven.compiler.source>  
    <maven.compiler.target>17</maven.compiler.target>  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.1</version>
    </dependency>


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

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.49</version>
    </dependency>

    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>


  </dependencies>
</project>

  1. 学生表
-- auto-generated definition
create table student
(
    id   int auto_increment comment 'id'
        primary key,
    name varchar(10) null comment '姓名',
    age  int         null comment '年龄'
);

3.mysql数据库与redis存储数据准备

  • 随机出数据通过jdbc插入
//获取数据库连接
    public  Connection  getConnection(){
        System.out.println("获取数据库连接");
        String url = "jdbc:mysql://localhost:3306/db_test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
        String username = "root";
        String password = "1234";
        Connection conn = null;

        try {
             conn = DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

//mysql添加数据
    @Test
    public void addMysql(){
        System.out.println("mysql添加数据");
        Connection conn = getConnection();

        try  {
            Random random = new Random();

            for (int i = 0; i < 10000; i++) {
                String name = "Name" + random.nextInt(10000);
                int age = random.nextInt(100);

                PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student (name, age) VALUES (?, ?)");
                pstmt.setString(1, name);
                pstmt.setInt(2, age);
                pstmt.executeUpdate();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
  • 将mysql数据库数据转储到redis
//添加redis数据
    @Test
    public void addRedis(){
        System.out.println("redis添加数据");
        Connection conn = getConnection();
        try  {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM student ");

            Jedis jedis = new Jedis("localhost");

            while (rs.next()) {
                String id = String.valueOf(rs.getInt("id"));
                String name = rs.getString("name");
                int age = rs.getInt("age");

                // 存储学生数据
                jedis.hset("student:" + id, "name", name);
                jedis.hset("student:" + id, "age", String.valueOf(age));

                // 使用有序集合存储学生ID和年龄,以便进行排序
                jedis.zadd("studentsByAge", age, id);
            }

            jedis.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

2 进行查询时间对比

思路
通过控制变量写出对应的查询方法,在测试过程中获取到对应的数据集即可

  • 查询方法
//mysql查询
    @Test
    public void queryDataWithJDBC() {
        Connection conn = getConnection();
        try  {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM student ");
//            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Age: " + rs.getInt("age"));
//            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 //redis查询
    @Test
    public void queryDataWithRedis() {
        Jedis jedis = new Jedis("localhost");
        Set<String> keys = jedis.keys("student:*");
//        for (String key : keys) {
//            Map<String, String> student = jedis.hgetAll(key);
            System.out.println("Key: " + key + ", Value: " + student);
//        }
        jedis.close();
    }
  • 对比方法
//对比查询时间
    @Test
    public void compareTime(){
        // 通过jdbc查询这10000条数据,记录查询时间
        long start = System.currentTimeMillis();
        queryDataWithJDBC();
        long end = System.currentTimeMillis();
        System.out.println("JDBC查询时间: " + (end - start) + "ms");

        // 通过redis查询这10000条数据,记录查询时间
        start = System.currentTimeMillis();
        queryDataWithRedis();
        end = System.currentTimeMillis();
        System.out.println("Redis查询时间: " + (end - start) + "ms");

    }
  • 结果
    在这里插入图片描述

3 根据年龄排序

  • mysql中通过order by子句
  //mysql实现
    @Test
    public void queryAndSortDataWithJDBC() {
        Connection conn = getConnection();
        try  {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM student ORDER BY age");
            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Age: " + rs.getInt("age"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
  • 在redis中采取了有序集合进行存储,直接获取即可
//redis实现
    @Test
    public void queryAndSortDataWithRedis() {
        Jedis jedis = new Jedis("localhost");
        Set<Tuple> students = jedis.zrangeWithScores("studentsByAge", 0, -1);
        for (Tuple student : students) {
            String id = student.getElement();
            double age = student.getScore();
            String name = jedis.hget("student:" + id, "name");
            System.out.println("ID: " + id + ", Name: " + name + ", Age: " + (int)age);
        }
        jedis.close();
    }

4 抽奖

  • 代码
 //抽奖
    @Test
    public void lottery() {
        Jedis jedis = new Jedis("localhost");

        // 添加奖品
        String[] prizes = {"锅", "碗", "瓢", "盆", "金元宝"};
        for (String prize : prizes) {
            jedis.sadd("prizes", prize);
        }

        // 年龄最小的前5人
        System.out.println("年龄最小的前5人:");
        Set<Tuple> youngestStudents = jedis.zrangeWithScores("studentsByAge", 0, 4);
        for (Tuple student : youngestStudents) {
            String id = student.getElement();
            double age = student.getScore();
            String name = jedis.hget("student:" + id, "name");
            String prize = jedis.srandmember("prizes");
            System.out.println("恭喜 " + name + " 获得了抽奖机会!奖品是:" + prize);
        }

        // 年龄最大的后5人
        System.out.println("年龄最大的后5人:");
        Set<Tuple> oldestStudents = jedis.zrevrangeWithScores("studentsByAge", 0, 4);
        for (Tuple student : oldestStudents) {
            String id = student.getElement();
            double age = student.getScore();
            String name = jedis.hget("student:" + id, "name");
            String prize = jedis.srandmember("prizes");
            System.out.println("恭喜 " + name + " 获得了抽奖机会!奖品是:" + prize);
        }

        jedis.close();
    }
  • 结果
    在这里插入图片描述
    在这里插入图片描述

5 完整测试代码

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;

import java.sql.*;
import java.util.Map;
import java.util.Random;
import java.util.Set;

/**
 * ClassName: JDBCTest
 * Package: PACKAGE_NAME
 * Description:
 *
 * @Author 夜蕴冰阳
 * @Create 2024/3/17 12:11
 * @Version 1.0
 */

public class RedisAndMysqlTest {


    //获取数据库连接
    public  Connection  getConnection(){
        System.out.println("获取数据库连接");
        String url = "jdbc:mysql://localhost:3306/db_test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
        String username = "root";
        String password = "1234";
        Connection conn = null;

        try {
             conn = DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    //mysql添加数据
    @Test
    public void addMysql(){
        System.out.println("mysql添加数据");
        Connection conn = getConnection();

        try  {
            Random random = new Random();

            for (int i = 0; i < 10000; i++) {
                String name = "Name" + random.nextInt(10000);
                int age = random.nextInt(100);

                PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student (name, age) VALUES (?, ?)");
                pstmt.setString(1, name);
                pstmt.setInt(2, age);
                pstmt.executeUpdate();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    //添加redis数据
    @Test
    public void addRedis(){
        System.out.println("redis添加数据");
        Connection conn = getConnection();
        try  {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM student ");

            Jedis jedis = new Jedis("localhost");

            while (rs.next()) {
                String id = String.valueOf(rs.getInt("id"));
                String name = rs.getString("name");
                int age = rs.getInt("age");

                // 存储学生数据
                jedis.hset("student:" + id, "name", name);
                jedis.hset("student:" + id, "age", String.valueOf(age));

                // 使用有序集合存储学生ID和年龄,以便进行排序
                jedis.zadd("studentsByAge", age, id);
            }

            jedis.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    //对比查询时间
    @Test
    public void compareTime(){
        // 通过jdbc查询这10000条数据,记录查询时间
        long start = System.currentTimeMillis();
        queryDataWithJDBC();
        long end = System.currentTimeMillis();
        System.out.println("JDBC查询时间: " + (end - start) + "ms");

        // 通过redis查询这10000条数据,记录查询时间
        start = System.currentTimeMillis();
        queryDataWithRedis();
        end = System.currentTimeMillis();
        System.out.println("Redis查询时间: " + (end - start) + "ms");

    }

    //根据年龄排序
    //mysql实现
    @Test
    public void queryAndSortDataWithJDBC() {
        Connection conn = getConnection();
        try  {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM student ORDER BY age");
            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Age: " + rs.getInt("age"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //redis实现
    @Test
    public void queryAndSortDataWithRedis() {
        Jedis jedis = new Jedis("localhost");
        Set<Tuple> students = jedis.zrangeWithScores("studentsByAge", 0, -1);
        for (Tuple student : students) {
            String id = student.getElement();
            double age = student.getScore();
            String name = jedis.hget("student:" + id, "name");
            System.out.println("ID: " + id + ", Name: " + name + ", Age: " + (int)age);
        }
        jedis.close();
    }

    //抽奖
    @Test
    public void lottery() {
        Jedis jedis = new Jedis("localhost");

        // 添加奖品
        String[] prizes = {"锅", "碗", "瓢", "盆", "金元宝"};
        for (String prize : prizes) {
            jedis.sadd("prizes", prize);
        }

        // 年龄最小的前5人
        System.out.println("年龄最小的前5人:");
        Set<Tuple> youngestStudents = jedis.zrangeWithScores("studentsByAge", 0, 4);
        for (Tuple student : youngestStudents) {
            String id = student.getElement();
            double age = student.getScore();
            String name = jedis.hget("student:" + id, "name");
            String prize = jedis.srandmember("prizes");
            System.out.println("恭喜 " + name + " 获得了抽奖机会!奖品是:" + prize);
        }

        // 年龄最大的后5人
        System.out.println("年龄最大的后5人:");
        Set<Tuple> oldestStudents = jedis.zrevrangeWithScores("studentsByAge", 0, 4);
        for (Tuple student : oldestStudents) {
            String id = student.getElement();
            double age = student.getScore();
            String name = jedis.hget("student:" + id, "name");
            String prize = jedis.srandmember("prizes");
            System.out.println("恭喜 " + name + " 获得了抽奖机会!奖品是:" + prize);
        }

        jedis.close();
    }

    //mysql查询
    @Test
    public void queryDataWithJDBC() {
        Connection conn = getConnection();
        try  {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM student ");
//            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Age: " + rs.getInt("age"));
//            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //redis查询
    @Test
    public void queryDataWithRedis() {
        Jedis jedis = new Jedis("localhost");
        Set<String> keys = jedis.keys("student:*");
//        for (String key : keys) {
//            Map<String, String> student = jedis.hgetAll(key);
            System.out.println("Key: " + key + ", Value: " + student);
//        }
        jedis.close();
    }


    //清空mysql表数据和redis数据
    @Test
    public void clearData() {
        Connection conn = getConnection();
        try  {
            Statement stmt = conn.createStatement();
            stmt.executeUpdate("TRUNCATE TABLE student");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        Jedis jedis = new Jedis("localhost");
        jedis.flushAll();
        jedis.close();
    }

    //mysql数据遍历
    @Test
    public void DataWithJDBC() {
        Connection conn = getConnection();
        try  {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM student ");
            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Age: " + rs.getInt("age"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //redis数据遍历
    @Test
    public void DataWithRedis() {
        Jedis jedis = new Jedis("localhost");
        Set<String> keys = jedis.keys("student:*");
        for (String key : keys) {
            Map<String, String> student = jedis.hgetAll(key);
            System.out.println("Key: " + key + ", Value: " + student);
        }
        jedis.close();
    }




}

标签:数据测试,String,rs,redis,System,jedis,student,mysql,name
From: https://blog.csdn.net/qq_52312147/article/details/136782604

相关文章

  • MySQL--索引
    目录一.MySQL的索引能提高效率的原因主要有以下几点:二.索引的类型三.EXPLAIN执行计划分析四.什么情况添加索引五.联合索引注意哪些细节六.不合理使用索引的场景七.MySQL为什么有时会选错索引一.MySQL的索引能提高效率的原因主要有以下几点:快速定位数据:索引是一种数......
  • 13_redis复制机制
    Redis复制机制(replication)概述Redis复制机制就是主从复制,master数据库以写为主,slave数据库以读为主,当master数据发生变化时,自动的将新的数据异步同步到其他slave数据库。作用读写分离容灾恢复数据备份水平扩容支持高并发怎么用一般只配置(从)读库,不配置(主)写库(一主多从)。m......
  • 基于Django旅游景区景点订票系统设计与实现(Pycharm+Python+Mysql)
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • OceanBase初体验之从MySQL迁移数据到OceanBase集群
    前置条件MySQL环境OceanBase环境测试用的表结构和一些数据先在源端MySQL用如下脚本创建测试表,以及写入10000条数据用于迁移测试。usetest;CREATETABLEstudents(`id`intNOTNULLPRIMARYKEY,`name`varchar(255),`code`varchar(20),`class`varch......
  • [redis] 基于Docker安装Redis
    0序环境信息OS:CENTOS7.9Docker:25.0.4Redis:7.2.47.2.4版本比较新,也可尝试6.0.8等版本1安装步骤Step0安装docker略。可参见:[Docker]基于CENTOS7安装Docker环境-博客园/千千寰宇基于Docker安装MYSQL/Step1安装docker环境-博客园/千千......
  • django重庆工商大学校园车辆管理系统(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着科技的不断发展,信息化已经成为了现代社会的一种趋势。在校园中,车辆管理作为一项重要的工作,其效率和准确性对于保障校园安全和秩序具有重要意义。重庆工......
  • django中医共享管理系统设计(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着科技的发展,互联网技术已经深入到各个领域,医疗行业也不例外。中医作为中国传统的医学,其独特的诊疗方式和理论体系在全世界都有一定的影响力。然而,中医的......
  • 查看宝塔mysql二进制文件 mysqlbinlog
    mysqlbinlog执行文件位置/www/server/mysql/binmysql-bin二进制日志位置/www/server/data/#/www/server/data/mysql-bin.000060把二进制导出为.sql文件#建议/www/server/data/mysql-bin.000060文件cp到mysqlbinlog文件执行目录并设置权限为www755./mysqlbinlogmysql-......
  • 智能酒店管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着科技的进步和旅游业的繁荣,酒店行业正面临着前所未有的机遇与挑战。为了提高服务质量、运营效率以及顾客满意度,智能酒店管理系统应运而生。这种系统利用......
  • 灾情信息管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着自然灾害频发,及时有效的灾情信息管理对于灾害应对和救援工作至关重要。一个专业的灾情信息管理系统能够帮助政府和救援组织快速收集、处理和分析灾区数......