mysql与redis数据测试

题目要求

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.rhkb.cn/news/278001.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GPT-SOVITS-03】SOVITS 模块-生成模型解析

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

vb.net+zxing.net随机彩色二维码、条形码

需要zxing库支持ZXing.NET Generate QR Code & Barcode in C# Alternatives | IronBarcode 效果图&#xff1a; 思路&#xff1a;先生成1个单位的二维码&#xff0c;然后再通过像素填充颜色&#xff0c;颜色数组要通过洗牌算法 洗牌算法 Dim shuffledCards As New List(…

Java八股文(MyBatis Plus)

Java八股文のMyBatis Plus MyBatis Plus MyBatis Plus MyBatis Plus 是什么&#xff1f;它与 MyBatis 有什么区别&#xff1f; MyBatis Plus 是基于 MyBatis 进行扩展的一款持久层框架&#xff0c;它提供了一系列增强功能&#xff0c;简化了 MyBatis 的使用。 与 MyBatis 相比…

K8S POD 启动探针 startupProbe 的使用

当我们启动一个POD 时&#xff0c; 当k8s detect 里面的容器启动成功时&#xff0c; 就会认为这个POD 启动完成了&#xff0c; 通常就会在状态里表示 ready 1/1 … 例如 rootk8s-master:~# kubectl get pods NAME READY STATUS RESTARTS AGE bq-api-demo 1…

有来团队后台项目-解析7

sass 安装 因为在使用vite 创建项目的时候&#xff0c;已经安装了sass&#xff0c;所以不需要安装。 如果要安装&#xff0c;那么就执行 npm i -D sass 创建文件 src 目录下创建文件 目录结构如图所示&#xff1a; reset.scss *, ::before, ::after {box-sizing: border-…

矩阵中移动的最大次数

文章目录 所属专栏:BFS算法 题目链接 思路如下&#xff1a; 1.首先我们需要从第一列开始遍历&#xff0c;寻找每一个都能够满足条件的位置&#xff0c;将它插入到数组里面 2.第一列遍历完了后我们先判断第一列的数是否都满足条件插入到数组里面&#xff0c;如果数组为空&#…

电脑充电器能充手机吗?如何给手机充电?

电脑充电器可以给手机充电吗&#xff1f; 电脑充电器可以给手机充电&#xff0c;但前提是电脑充电器的功率输出与手机的功率匹配且接口匹配。 假设电脑充电器的输出功率为5V/2A&#xff0c;手机也支持5V/2A的输入功率。 只要接口匹配&#xff0c;就可以使用电脑充电器给手机充…

Spring Boot Starter: 快速简明地创建Spring应用

Spring Boot Starter是Spring Boot的核心功能之一&#xff0c;它帮助开发人员快速简明地创建、配置和运行Spring应用。在本文中&#xff0c;我们将详细介绍Spring Boot Starter以及如何使用它创建一个Spring Boot应用。 文章目录 什么是Spring Boot Starter?为何使用Spring B…

Jenkins通知目标服务器拉取Harbor镜像部署

1.告诉目标服务器拉取哪个镜像 2.判断当前有没有正在运行此容器&#xff0c;有就删除 3.接着查看拉取的镜像目标服务器上是否已存在&#xff0c;有就删除 4.拉取Harbor镜像 5.运行容器 目标服务器编写脚本 创建个部署脚本 vim deploy.sh告诉目标服务器Harbor地址、仓库、镜像…

文字弹性跳动CSS3代码

文字弹性跳动CSS3代码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 下载地址 文字弹性跳动CSS3代码

Python入门(四)

选择结构 if结构 if和else同时存在&#xff1a;如果if条件不成立&#xff0c;则执行else语句。只存在if&#xff0c;不存在else&#xff1a;没有else&#xff0c;实际上与空的else 等价。如果if后的条件不成立&#xff0c;那么计算机什么都不用执行。 强制缩进 Python与C语…

Qt文件以及文件夹相关类(QDir、QFile、QFileInfo)的使用

关于Qt相关文件读写操作以及文件夹的一些知识&#xff0c;之前也写过一些博客&#xff1a; Qt关于路径的处理&#xff08;绝对路径、相对路径、路径拼接、工作目录、运行目录&#xff09;_qt 相对路径-CSDN博客 C/Qt 读写文件_qt c 读取文本文件-CSDN博客 C/Qt读写ini文件_…

webgl canvas系列——快速加背景、抠图、加水印并下载图片

文章目录 ⭐前言⭐canvas绘制图片&#x1f496;绘制csdn图片&#x1f496;给png图片加背景&#x1f496;cavans下载图片&#x1f496;cavans上传图片并抠图&#x1f496;cavans添加文字水印&#x1f496;inscode 完整代码块 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#x…

Java中的内存溢出与内存泄漏深度解析

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

Hadoop学习3:问题解决

文章目录 问题解决1. ERROR: but there is no HDFS_NAMENODE_USER defined2. JAVA_HOME is not set and could not be found.3. Hadoop-DFS页面访问不了4. namenode格式化失败&#xff0c;或者dfs页面打开失败5. ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Ab…

RabbitMQ——死信队列和延迟队列

文章目录 RabbitMQ——死信队列和延迟队列1、死信队列2、基于插件的延迟队列2.1、安装延迟队列插件2.2、代码实例 RabbitMQ——死信队列和延迟队列 1、死信队列 死信队列&#xff08;Dead Letter Queue&#xff0c;DLQ&#xff09;是 RabbitMQ 中的一种重要特性&#xff0c;用…

npm包、全局数据共享、分包

使用 npm 包 小程序对 npm 的支持与限制 目前&#xff0c;小程序中已经支持使用 npm 安装第三方包&#xff0c;从而来提高小程序的开发效率。但是&#xff0c;在小程序中使用npm 包有如下 3 个限制&#xff1a; ① 不支持依赖于 Node.js 内置库的包 ② 不支持依赖于浏览器内置…

C#配置连接数据库字段

在Web.config文件中 添加如下配置 <!--连接数据库字段--><connectionStrings><add name"sql" connectionString"server.;uidsa;pwd8888;databaseArticleWebSite" /></connectionStrings>

Day67:WEB攻防-Java安全JNDIRMILDAP五大不安全组件RCE执行不出网

知识点&#xff1a; 1、Java安全-RCE执行-5大类函数调用 2、Java安全-JNDI注入-RMI&LDAP&高版本 3、Java安全-不安全组件-Shiro&FastJson&JackJson&XStream&Log4j Java安全-RCE执行-5大类函数调用 Java中代码执行的类&#xff1a; GroovyRuntimeExecPr…

【基于HTML5的网页设计及应用】——改变文字和背景颜色

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…