本文最后更新于:2022年12月5日 晚上
姓名:张家亮 |
学号:19020031106 |
班级:2019级计算机科学与技术2班 |
授课老师:刘洁、刘艳艳 |
实验名称:Redis和MongoDB的应用 |
完成日期:2022年12月5日 |
Redis
下载安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #下载网址,网速不好也可以直接下载,然后winscp上传到服务器 建议到/opt/module目录下 #下面命令不好用,就去软件包中找redis压缩包 cd /opt/module wget https://download.redis.io/releases/redis-6.2.6.tar.gz
# 如果这个压缩包是 -rw-r--r-- root root 权限 sudo chown hadoop:hadoop redis-6.2.6.tar.gz chmod 777 redis-6.2.6.tar.gz
#解压 tar -zxvf redis-6.2.6.tar.gz chmod -R 777 redis-6.2.6 cd redis-6.2.6
#安装基本环境 sudo yum install gcc-c++ #查看版本,确定安装成功 gcc -v
make sudo make install
|
redis默认安装路径/usr/local/bin
修改配置文件
1 2 3
| #/usr/local/bin 目录下创建一个文件夹,存放配置文件 sudo mkdir bconfig sudo cp /opt/module/redis-6.2.6/redis.conf bconfig/
|
redis默认不是后台启动,修改配置文件为后台启动, 后面需要远程连接redis ,所以添加IP和本地两种
1 2 3 4 5
| cd bconfig sudo chmod 777 redis.conf vim redis.conf #找到 daemonize no 修改为damonize yes bind 127.0.0.1 192.168.10.100 #建议参照redis.conf
|
启动redis服务
1 2 3
| #回到/usr/local/bin下 ,使用我们自己的配置文件启动 redis-server bconfig/redis.conf redis-cli -p 6379
|
用Redis的哈希结构设计出学生表Student
(键值可以用student.zhangsan和student.lisi来表示两个键值属于同一个表);
1 2 3 4 5 6 7 8 9
| #先启动redis服务 # 执行下述命令 #Hash(哈希)类型(key map) hset student.zhangsan English 69 hset student.zhangsan Math 86 hset student.zhangsan Computer 77 hset student.lisi English 55 hset student.lisi Math 100 hset student.lisi Computer 88
|
用hgetall命令分别输出zhangsan和lisi的成绩信息;
1 2
| hgetall student.zhangsan hgetall student.lisi
|
用hget命令查询zhangsan的Computer成绩;
1
| hget student.zhangsan Computer
|
修改lisi的Math成绩,改为95。
1
| hset student.lisi Math 95
|
根据上面已经设计出的学生表Student,用Redis的JAVA客户端编程(jedis)
使用IDEA创建一个Maven项目
添加依赖pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?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>org.example</groupId> <artifactId>Redis</artifactId> <version>1.0-SNAPSHOT</version>
<dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>4.3.1</version> </dependency>
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.20</version> </dependency> </dependencies> </project>
|
如果只使用API操作,则只需开启服务
1
| redis-server bconfig/redis.conf
|
添加数据:English:45 Math:89 Computer:100
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package org.Redis;
import redis.clients.jedis.Jedis;
import java.util.Map;
public class redistrict { public static void main(String[] args) { Jedis jedis = new Jedis("192.168.10.100", 6379); jedis.hset("student.scofield", "English", "45"); jedis.hset("student.scofield", "Math", "89"); jedis.hset("student.scofield", "Computer", "100"); Map<String, String> value = jedis.hgetAll("student.scofield"); for (Map.Entry<String, String> entry : value.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); }
} }
|
获取scofield的English成绩信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package org.Redis;
import redis.clients.jedis.Jedis;
import java.util.Map;
public class redistest { public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.10.100", 6379); String value = jedis.hget("student.scofield", "English"); System.out.println("scofield's English score is: " + value);
} }
|
MongoDB
下载安装
1 2 3 4 5 6 7 8
| #下载到/opt/module curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.12.tgz
#解压到/opt/module tar -zxvf mongodb-linux-x86_64-3.2.12.tgz
#进入mongodb中 cd /opt/module/mongodb-linux-x86_64-3.2.12
|
配置系统文件profile
导入环境变量,并使之生效
1 2 3 4 5 6
| # 在最后面添加即可 export MONGODB_HOME=/opt/module/mongodb-linux-x86_64-3.2.12 export PATH=$PATH:$MONGODB_HOME/bin
# 使之生效 source /etc/profile
|
配置部署
创建用于存放数据和日志文件的文件夹,并修改其权限增加读写权限
1 2 3 4 5 6 7 8 9 10
| cd /opt/module/mongodb-linux-x86_64-3.2.12 sudo mkdir -p data/db sudo chown -R hadoop:hadoop data/ sudo chmod -R 777 data/db
sudo mkdir logs cd logs sudo touch mongodb.log cd .. sudo chown -R hadoop:hadoop logs
|
mongodb
启动配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #添加配置文件,并填入配置信息 cd /opt/module/mongodb-linux-x86_64-3.2.12/bin sudo vim mongodb.conf
#配置信息如下 dbpath = /opt/module/mongodb-linux-x86_64-3.2.12/data/db #数据文件存放目录 logpath = /opt/module/mongodb-linux-x86_64-3.2.12/logs/mongodb.log #日志文件存放目录 port = 27017 #端口 fork = true #以守护程序的方式启用,即在后台运行 nohttpinterface = true
|
启动mongod服务,以配置文件的方式启动
1 2 3
| cd /opt/module/mongodb-linux-x86_64-3.2.12/bin sudo chown hadoop:hadoop mongodb.conf ./mongod -f mongodb.conf
|
连接mongodb数据库
前提知识
数据库database是一个仓库,在仓库中存放集合
集合collection类似于数组,在集合中可以存放文档
文档document是文档型数据库的最小单位,我们存储和操作的都是文档
在mongodb中数据库和集合不需要自己创建,没有会自动创建
前提指令
1 2 3 4 5 6 7 8 9 10 11
| #显示所有的数据库 show dbs
#使用某个数据库,没有数据库,会自己创建数据库 use student
#查询当前处于哪一个数据库 db
#显示当前数据库下所有集合 show collections
|
任务要求
{ “name”: “zhangsan”, “score”: { “English”: 69, “Math”: 86, “Computer”: 77 } }
{ “name”: “lisi”, “score”: { “English”: 55, “Math”: 100, “Computer”: 88 } }
用MongoDB Shell设计出student集合;
首先,切换到student集合,命令如下:
其次,定义包含上述两个文档的数组,命令如下:
1 2
| var stus=[ {"name":"zhangsan","scores":{"English":69,"Math":86,"Computer":77}},{"name":"lisi","score":{"English":55,"Math":100,"Computer":88}} ]
|
最后调用如下命令插入数据库:
用find()方法输出两个学生的信息;
1
| db.student.find().pretty()
|
用find函数查询zhangsan的所有成绩(只显示score列);
1
| db.student.find({"name":"zhangsan"},{"_id":0,"name":0})
|
修改lisi的Math成绩,改为95
1
| db.student.update({"name":"lisi"}, {"$set":{"score.Math":95}} )
|
java api 实验
创建一个maven工程(完全可以和上面的Redis用一个项目,本人也正是这样做的)
添加依赖项:
1 2 3 4 5
| <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.11</version> </dependency>
|
用MongoDB的Java客户端编程,实现如下操作
添加数据:English:45 Math:89 Computer:100
创建一个类名为mongodbtest
的类,实现上述添加数据操作的Java代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| package org.mongoDB;
import java.util.ArrayList; import java.util.List;
import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase;
public class mongodb_data {
public static void main(String[] args) { MongoClient mongoClient = new MongoClient("192.168.10.100", 27017); MongoDatabase mongoDatabase = mongoClient.getDatabase("student"); MongoCollection<Document> collection = mongoDatabase.getCollection("student"); Document document = new Document("name", "scofield"). append("score", new Document("English", 45). append("Math", 89). append("Computer", 100)); List<Document> documents = new ArrayList<Document>(); documents.add(document); collection.insertMany(documents); System.out.println("文档插入成功");
} }
|
获取scofield的所有成绩成绩信息(只显示score列)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| package org.mongoDB;
import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import org.bson.Document;
public class mongodb_test {
public static void main(String[] args) { MongoClient mongoClient = new MongoClient("192.168.10.100", 27017); MongoDatabase mongoDatabase = mongoClient.getDatabase("student"); MongoCollection<Document> collection = mongoDatabase.getCollection("student"); for (Document document : collection.find(new Document("name", "scofield")). projection(new Document("score", 1).append("_id", 0))) System.out.println(document.toJson()); }
}
|