mysql与redis数据测试

news/2024/5/9 10:31:08

题目要求

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添加数据@Testpublic 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数据@Testpublic 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查询@Testpublic 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查询@Testpublic 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();}
  • 对比方法
//对比查询时间@Testpublic 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实现@Testpublic 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实现@Testpublic 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 抽奖

  • 代码
 //抽奖@Testpublic 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: RedisAndMysqlTest* 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添加数据@Testpublic 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数据@Testpublic 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();}}//对比查询时间@Testpublic 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实现@Testpublic 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实现@Testpublic 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();}//抽奖@Testpublic 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查询@Testpublic 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查询@Testpublic 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数据@Testpublic 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数据遍历@Testpublic 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数据遍历@Testpublic 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();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10693.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

深入理解计算机系统学习笔记

1.存储器层次结构 存储技术&#xff1a;不同存储技术的访问时间差异很大。速度较快的技术每字节的成本要比速度较慢的技术高&#xff0c;而且容量较小。CPU和主存之间的速度差距在增大。 计算机软件&#xff1a;一个编写良好的程序倾向于展示出良好的局部性。 硬件和软件的这…

Tomcat Seeion 集群

部署&#xff1a;nginx服务器&#xff1a;11-11&#xff1b;tomcat1:11-3; tomcat2:11-6 nginx服务器11-11做搭建&#xff1a; [rootmcb-11 ~]# systemctl stop firewalld [rootmcb-11 ~]# setenforce 0 [rootmcb-11 ~]# yum install epel-release.noarch -y [rootmcb…

2024智建会凝聚科技创新成果,促进建筑低碳发展

在建设中&#xff0c;将一些废弃工业生产废旧料作为混凝土合理掺和料&#xff0c;既可 以节省水泥等装饰建材&#xff0c;又能增加混泥土的使用期。装配式结构和新型墙体材料、屋面防水材料彼此适配&#xff0c;这些材料具有重量轻、施工简单、施工周期时间短、采用肝纤维化、复…

在线疫苗预约小程序|基于微信小程序的在线疫苗预约小程序设计与实现(源码+数据库+文档)

在线疫苗预约小程序目录 目录 基于微信小程序的在线疫苗预约小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、疫苗管理 2、疫苗订单管理 3、论坛管理 4、公告管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源…

3.4 bp,si,di寄存器,寻址方式,寄存器总结

汇编语言 1. [bxidata] 我们可以用[bx]来指明一个内存单元我们也可以用[bxidata]来表示一个内存单元&#xff0c;它的偏移地址为bx中的数值加上idata mount c d:masm c: debug r d 2000:1000 e 2000:1000 12 34 56 78 a mov ax,2000 mov ds,ax mov bx,1000 mov ax,[bx] mov c…

最新ChatGPT/GPT4科研应用与AI绘图及论文高效写作

原文链接&#xff1a;最新ChatGPT/GPT4科研应用与AI绘图及论文高效写作https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247597452&idx1&sn8aa991235ffee89fc76590a90b9005d7&chksmfa823c6bcdf5b57df0cb02ecd1821921f38ea6de34c79e4172e7fa869b2f0bc1f25…