目录
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(); }