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.mzph.cn/news/752365.shtml

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

相关文章

【FPGA/IC】什么是模块化设计?

什么是模块化设计 FPGA/IC设计中根据模块层次的不同有两种基本的设计方法&#xff1a; 自下而上方法对设计进行逐次划分的过程是从基本单元出发的&#xff0c;设计树最末枝上的单元是已经设计好的基本单元&#xff0c;或者其他项目开发好的单元或者IP。该方法先对底层的功能块…

探索发布-订阅模式的深度奥秘-实现高效、解耦的系统通信

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自&#xff1a;探索设计模式的魅力&#xff1a;探索发布-订阅模式的深度奥秘-…

Jest:JavaScript的单元测试利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

作品展示ETL

1、ETL 作业定义、作业导入、控件拖拽、执行、监控、稽核、告警、报告导出、定时设定 欧洲某国电信系统数据割接作业定义中文页面&#xff08;作业顶层&#xff0c;可切英文&#xff0c;按F1弹当前页面帮助&#xff09; 涉及文件拆分、文件到mysql、库到库、数据清洗、数据转…

Vue mqtt 附在线mqtt客户端地址 + 完整示例

mqtt&#xff1a;轻量级物联网消息推送协议。 目录 一、介绍 1、官方文档 1&#xff09;npm网 2) 中文网 MQTT中文网_MQTT 物联网接入平台-MQTT.CN 2、官方示例 二、准备工作 1、安装依赖包 2、示例版本 三、使用步骤 1、在单页面引入 mqtt 四、完整示例 tips 一、介…

渐开线花键环规的几种加工方法

小伙伴们大家好&#xff0c;今天咱们聊一聊渐开线花键环规的几种加工方法。 渐开线花键环规是在汽车、摩托车以及机械制造工业应用非常广泛的一种检测量具。它属于是一种内花键齿轮&#xff0c;其精度和表面粗糙度要求都比较高。采用的加工方法也比较多&#xff0c;下面详细看…

【爬虫逆向】Python逆向采集猫眼电影票房数据

进行数据抓包&#xff0c;因为这个网站有数据加密 !pip install jsonpathCollecting jsonpathDownloading jsonpath-0.82.2.tar.gz (10 kB)Preparing metadata (setup.py) ... done Building wheels for collected packages: jsonpathBuilding wheel for jsonpath (setup.py) .…

Android VINF

周末搞这玩意欲仙欲死&#xff0c;没办法只有看看。VINTF是供应商接口对象&#xff08;VINTF 对象&#xff09;&#xff0c;准确的说&#xff0c;这个是属于兼容性矩阵概念。。。有点想起了以前看过的一个电影&#xff0c;异次元杀阵。。。下面是谷歌官方的图。 本质上其实就是…

C++之类和对象(3)

目录 1. 再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit 2. static成员 2.1 概念 3. 友元 3.1 友元函数 3.2 友元类 4. 内部类 5. 匿名对象 6. 拷贝对象时编译器做出的优化 1. 再谈构造函数 1.1 构造函数体赋值 class Date { public:Date(int year2024…

Helm Chart部署最简SpringBoot到K8S(AWS EKS版)

目标 这里假设&#xff0c;我们已经基本会使用k8s的kubectl命令进行部署了&#xff0c;也已经会自己打docker镜像推送到AWS ECR上面去了。而且&#xff0c;已经在云上准备好了AWS ECR镜像库和AWS EKS的k8s集群了。 这个前提上面&#xff0c;我们今天使用Helm Chart项目准备k8s…

数据结构试卷第九套

1.时间复杂度 2.树&#xff0c;森林&#xff0c;二叉树的转换 2.1树转二叉树 给所有的兄弟节点之间加一条连线&#xff1b;去线&#xff0c;只保留当前根节点与第一个叶子节点的连线&#xff0c;删除它与其他节点之间的连线&#xff1b;然后根据左孩子右兄弟进行调整&#xf…

个人网站制作 Part 11 添加用户权限管理 | Web开发项目

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加用户权限管理&#x1f528;使用Passport.js&#x1f527;步骤 1: 修改Passport本地策略 &#x1f528;修改用户模型&#x1f527;步骤 2: 修改用户模型 &#x1f528…

医学数据分析中缺失值的处理方法

医学数据分析中缺失值的处理方法 &#xff08;为了更好的展示&#xff0c;在和鲸社区使用代码进行展示&#xff09; 医学数据分析中&#xff0c;缺失值是不可避免的问题。缺失值的存在会影响数据的完整性和准确性&#xff0c;进而影响分析结果的可靠性。因此&#xff0c;在进…

中创ET4410台式电桥固件升级工具(修复了列表扫描的BUG)

中创ET4410台式LCR数字电桥固件升级工具和最新版固件&#xff08;修复了列表扫描的BUG&#xff09; 中创ET4410 台式LCR数字电桥 简单开箱测评&#xff1a;https://blog.zeruns.tech/archives/763.html 之前买的中创ET4410台式LCR数字电桥固件有BUG&#xff08;胜利的VC4090C…

FREERTOS中断配置和临界段

本文基础内容参考的是正点原子的FREERTOS课程。 这是基于HAL库的 正点原子手把手教你学FreeRTOS实时系统 这是基于标准库的 正点原子FreeRTOS手把手教学-基于STM32 回顾STM32的中断 什么是中断&#xff1f; 中断优先级分组设置 Freertos中断分组 Freertos就是用的最后一种&…

redis学习-redis介绍

目录 1.redis介绍 2.redis常用命令&#xff08;可以在官网的命令中查看redis的所有命令&#xff09; 2.1终端命令 2.2 redis通用命令 2.3五大基本类型的命令以及特殊情况分析 &#xff08;导航&#xff09; 3.事务 4. redis实现消息订阅 5. redis的两种持久化策略 …

KubeSphere集群安装-nfs分布式文件共享-对接Harbor-对接阿里云镜像仓库-遇到踩坑记录

KubeSphere安装和使用集群版 官网:https://www.kubesphere.io/zh/ 使用 KubeKey 内置 HAproxy 创建高可用集群:https://www.kubesphere.io/zh/docs/v3.3/installing-on-linux/high-availability-configurations/internal-ha-configuration/ 特别注意 安装前注意必须把当前使…

AG32 MCU以太网应用实例demo

一. 前言 AGM32系列32位微控制器旨在为MCU用户提供新的自由度和丰富的兼容外设&#xff0c;以及兼容的引脚和功能。AG32F407系列产品具有卓越的品质&#xff0c;稳定性和卓越的价格价值。 AG32产品线支持其所有接口外设尽可能接近主流兼容性&#xff0c;并提供丰富的参考设计…

排序算法:快速排序(非递归)

文章目录 一、先建立一个栈二、代码编写 !](https://img-blog.csdnimg.cn/direct/870dd101173d4522862e4459b32237a3.png) 先赞后看&#xff0c;养成习惯&#xff01;&#xff01;&#xff01;^ _ ^<3 ❤️ ❤️ ❤️ 码字不易&#xff0c;大家的支持就是我坚持下去的动力…

旧华硕电脑开机非常慢 电脑开机黑屏很久才显示品牌logo导致整体开机速度非常的慢怎么办

前提条件 电池需要20&#xff05;&#xff08;就是电池没有报废&#xff09;且电脑接好电源&#xff0c;千万别断电&#xff0c;电脑会变成砖头的 解决办法 更新bios即可解决&#xff0c;去对应品牌官网下载最新的bios版本就行了 网上都是一些更新驱动啊