Mysql和Redis数据测试

目录

Maven的简介

Maven的四大特征

Redis数据库

问题

解决思路 

1.创建Maven项目,准备相关依赖,JDBC连接数据库

2.用户表

3.插入10000条数据

4.建立查询语句

5.比较Mysql和Redis数据查询时间

6.按年龄排序比较查询时间

7.年龄排序后查询前5名随机分配奖品


Maven的简介

简介 Maven【[ˈmevən]】这个词可以翻译为"专家","内⾏"。 作为Apache组织中的⼀个颇为成功的开源项⽬,Maven主要服务于基于java平台的项⽬构建,依赖管理和项⽬信息管理。 ⽆论是⼩型的开源类库项⽬,还是⼤型的企业级应⽤;⽆论是传统的瀑布式开发,还是流⾏的敏捷开发;Maven都能⼤显身⼿。

项⽬对象模型,通过其描述信息来管理项⽬的构建,报告和⽂档的软件项⽬管理⼯具。Maven⽀持了从⽹络上下载的功能,采⽤xml作为配置⽂件格式。Maven专注的是依赖管理,使⽤Java编写。

Maven的四大特征

1.依赖管理系统

Maven为Java世界引⼊了⼀个新的依赖管理系统jar包管理 jar 升级时修改配置⽂件即可。在Java世界中,可以⽤groupId、artifactId、version组成的Coordination(坐标)唯⼀标识⼀个依赖。

2.多模块构建

由于Maven中模块的概念, 因此⼀个实际项⽬往往会被划分为很多模块。 ⽐如spring是⼀个实际项⽬,其对应的Maven模块会有很多, 如spring-core,spring-webmvc等。

3.一致的项目构建

制定了⼀套项⽬⽬录结构作为标准的Java项⽬结构,解决不同ide 带来的⽂件⽬录不⼀致问题。

4.⼀致的构建模型和插件

Redis数据库

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,一款java操作redis数据库的工具 ,Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:

1) 字符串类型 string

2) 哈希类型 hash

3) 列表类型 list

4) 集合类型 set

5) 有序集合类型 sortedset

问题

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

解决思路 

1.创建Maven项目,准备相关依赖,JDBC连接数据库

 <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.8.0</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.19</version>
    </dependency>
  </dependencies>
 public static Connection method() throws SQLException {
        String url = "jdbc:mysql://localhost:3306/mydb8?serverTimezone=GMT%2B8";//serverTimezone=GMT%2B8东八区时区
        DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
        //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        Connection connection = DriverManager.getConnection(url, "root", "123456");
        return connection;
    }
2.用户表
create table user
(
    id   int auto_increment comment 'id' primary key,
    name varchar(10) comment '姓名',
    age  int  comment '年龄'
);
3.插入10000条数据
  • mysql数据
 //添加mysql数据
    public void addMysql() throws SQLException {
        Connection connection = method();
        Statement statement = connection.createStatement();
        for(int i = 1;i <=10000;i++){
            statement.executeUpdate("insert into user(id,name,age) values("+i+",'user"+i+"'," + (new Random().nextInt(50)+10) + ")");
        }
        connection.close();
    }
  • Redis数据
     //添加redis数据
        public void addRedis() throws SQLException {
            Connection connection = method();
            Statement statement = connection.createStatement();
            ResultSet rs = statement.executeQuery("select * from user");
            Jedis jedis = new Jedis("localhost",6379);
            while (rs.next()) {
                String id = String.valueOf(rs.getInt("id"));
                String name = rs.getString("name");
                int age = rs.getInt("age");
                // 哈希表存储学生数据
                jedis.hset("user:" + id, "name", name);
                jedis.hset("user:" + id, "age", String.valueOf(age));
            }
            jedis.close();
        }
    4.建立查询语句
    //mysql查询
        public void queryMysql() throws SQLException {
            Connection connection = method();
            Statement statement = connection.createStatement();
            ResultSet rs = statement.executeQuery("select * from user");
           /* while (rs.next()) {
                System.out.println("id: " + rs.getInt("id") + ", name: " + rs.getString("name") + ", age: " + rs.getInt("age"));
                }*/
            connection.close();
            }
    
        @Test
        //redis查询
        public void queryRedis() {
            Jedis jedis = new Jedis("localhost",6379);
            // 查询所有数据
            Set<String> keys = jedis.keys("user:*");
            Iterator<String> iterator = keys.iterator();
            while (iterator.hasNext()) {
                String key = iterator.next();
                String id = jedis.hget(key, "id");
                String name = jedis.hget(key, "name");
                String age = jedis.hget(key, "age");
            }
            jedis.close();
        }
    5.比较Mysql和Redis数据查询时间
       //两者时间比较
        public void compareTime() throws SQLException {
            // 通过jdbc查询10000条数据,记录查询时间
            long start = System.currentTimeMillis();
            queryMysql();
            long end = System.currentTimeMillis();
            System.out.println("JDBC查询10000条数据时间: " + (end - start) + "ms");
            // 通过redis查询10000条数据,记录查询时间
            long start1 = System.currentTimeMillis();
            queryRedis();
            long end1 = System.currentTimeMillis();
            System.out.println("Redis查询10000条数据时间: " + (end1 - start1) + "ms");
        }
    
    6.按年龄排序比较查询时间
     @Test
        //mysql数据按年龄排序
        public void sortAgeMysql() throws SQLException {
            Connection connection = method();
            Statement statement = connection.createStatement();
            ResultSet rs = statement.executeQuery("select * from user order by age");
            connection.close();
        }
    
        @Test
        //redis数据按年龄排序
        public void sortAgeRedis() throws SQLException {
            Connection connection = method();
            Statement statement = connection.createStatement();
            ResultSet rs = statement.executeQuery("select * from user");
            Jedis jedis = new Jedis("localhost",6379);
            while (rs.next()) {
                String id = String.valueOf(rs.getInt("id"));
                String name = rs.getString("name");
                int age = rs.getInt("age");
                jedis.zadd("userAge",age,id);
            }
            //zrangeWithScores是 Jedis 中用于操作有序集合的方法
            //tuple元组,相当于表中的一行记录
            Set<Tuple> users = jedis.zrangeWithScores("userAge", 0, -1);
            for (Tuple user : users) {
                String id = user.getElement();
                int age = (int)user.getScore();
               /* String name = jedis.hget("user:" + id, "name");
                System.out.println("id: " + id + ", name: " + name + ", age: " + age);*/
            }
            jedis.close();
            connection.close();
        }
    
        @Test
        //按年龄排序两者时间比较
        public void compareSortAgeTime() throws SQLException {
            long start = System.currentTimeMillis();
            sortAgeMysql();
            long end = System.currentTimeMillis();
            System.out.println("按年龄排序之后JDBC查询时间: " + (end - start) + "ms");
    
            long start1 = System.currentTimeMillis();
           sortAgeRedis();
            long end1 = System.currentTimeMillis();
            System.out.println("按年龄排序之后Redis查询时间: " + (end1 - start1) + "ms");
        }
    
    7.年龄排序后查询前5名随机分配奖品
      //前5人进行抽奖
        public void getPrize() {
            Jedis jedis = new Jedis("localhost",6379);
            // 添加奖品
            String[] prizes = {"电冰箱", "空调", "洗衣机", "炒锅", "电风扇"};
            for (String prize : prizes) {
                //sadd命令将一个或多个成员元素加入到集合中,无序唯一
                jedis.sadd("prizes", prize);
            }
            //排序之后前五名
            Set<Tuple> users = jedis.zrangeWithScores("userAge", 0, 4);
            for (Tuple user : users) {
                String id = user.getElement();
                int age = (int)user.getScore();
                String name = jedis.hget("user:" + id, "name");
                String prize = jedis.srandmember("prizes");
                System.out.println("恭喜" + name + "得到抽奖机会!奖品是:" + prize);
            }
            jedis.close();
        }

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值