⑦插入数据:向Redis
插入一条数据,只需要先设计好key
和value
,然后用set
命令插入数据即可。例如,在Course
表中插入一门新的课程“大数据”,4学分,操作命令和结果如下图所示。

⑧删除数据: Redis
有专门删除数据的命令——del
命令,命令格式为“del
键”。所以,如果要删除之前新增的课程“大数据”,只需输入命令“del Course:8:Cname”
,如下图所示,当输入“del Course:8:Cname”
时,返回“1”
,说明成功删除一条数据。

⑨查询数据:Redis
最简单的查询方式是使用get
命令。输入get
命令查询,输出为空,说明数据删除成功。

(二)MongoDB
的安装和使用。
? ?完成MongoDB
的基本的shell
命令。 MongoDB
是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json
的bson
格式,因此可以存储比较复杂的数据类型。Mongo
最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
①使用apt-get
命令进行在线安装MongoDB
,可以避免很多莫名其妙的问题。
命令行sudo apt-get install mongodb
可下载安装MongoDB
,默认安装的版本是MongoDB 2.6.10
,但目前MongoDB
已经升级到3.2.8
,可以通过添加软件源的方式来安装3.2.8
版本。
a.首先打开终端,导入公共key
到包管理器

b.创建MongoDB
的文件列表。

c.更新包管理器,安装MongoDB
。


d.安装完成MongoDB
以后,在终端输入以下命令查看MongoDB
版本。

②MongoDB
的启动和关闭。

③进入MongoDB
的shell
命令模式。默认连接的数据库是test
数据库,在此之前一定要确保已经启动了MongoDB
,否则会出现错误,启动之后运行成功情况如下。

④常用操作命令
数据库相关
show dbs
:显示数据库列表
show collections
:显示当前数据库中的集合(类似关系数据库中的表table
)
show users
:显示所有用户
use yourDB
:切换当前数据库至yourDB
db.help()
:显示数据库操作命令
db.yourCollection.help()
:显示集合操作命令,yourCollection
是集合名

MongoDB
没有创建数据库的命令,如果想创建一个“School”
的数据库,先运行use School
命令,之后做一些操作(如:创建聚集集合db.createCollection('teacher')
),这样就可以创建一个名叫“School”
的数据库。

⑤以一个School
数据库为例,在School
数据库中创建两个集合teacher
和student
,并对student
集合中的数据进行增删改查基本操作(集合Collection
相当于关系型数据库中的表table
)。
a. 切换到School
数据库(切换到School
数据库。MongoDB
无需预创建School
数据库,在使用时会自动创建)

b. 创建Collection
(创建一个聚集集合。MongoDB
其实在插入数据的时候,也会自动创建对应的集合,无需预定义集合)

c.与数据库创建类似,MongoDB
插入数据时也会自动创建集合。 插入数据有两种方式:insert
和save
。

插入数据成功

_id
相同,插入失败,不做操作。
d.添加的数据其结构是松散的,只要是json
格式均可,列属性均不固定,根据添加的数据为准。先定义数据再插入,就可以一次性插入多条数据。

e. 运行完以上例子,student
已自动创建,说明 MongoDB
不需要预先定义 collection
,在第一次插入数据后,collection
会自动的创建。

⑥查找数据
a. db.student.find()
查询所有记录。相当于:select * from student

b. db.student.find({sname: 'zhangsan'})
查询sname='zhangsan'
的记录。相当于: select * from student where sname='zhangsan'

c. db.student.find({},{sname:1, sage:1})
查询指定列sname
、sage
数据。相当于:select sname,sage from student
。
sname
:1表示返回sname
列,默认_id
字段也是返回的,可以添加_id:0
(意为不返回_id
)写成{sname: 1, sage: 1,_id:0}
,就不会返回默认的_id
字段了

d. db.student.find({sname: 'zhangsan', sage: 22})
and
与条件查询。相当于:select * from student where sname = 'zhangsan' and sage = 22

e. db.student.find({$or: [{sage: 22}, {sage: 25}]})
or
条件查询。相当于:select * from student where sage = 22 or sage = 25

f. db.youCollection.find(criteria, filterDisplay) criteria
:
查询条件,可选filterDisplay
:筛选显示部分数据,如显示指定列数据,可选(当选择时,第一个参数不可省略,若查询条件为空,可用{}
做占位符)

⑦修改数据 db.youCollection.update(criteria, objNew, upsert, multi )
criteria: update
的查询条件,类似sql update
查询内where
后面的 objNew
: update
的对象和一些更新的操作符(如$set
)等,也可以理解为sql update
查询内set
后面的。
upsert
: 如果不存在update
的记录,是否插入objNew
,true
为插入,默认是false
,不插入。
multi
: mongodb
默认是false
,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。默认false
,只修改匹配到的第一条数据。
其中criteria
和objNew
是必选参数,upsert
和multi
可选参数。 db.student.update({sname: 'lisi'}
, {$set: {sage: 30}}, false, true)
相当于:update student set sage =30 where sname = 'lisi'
;

⑧删除数据 db.student.remove({sname: 'chenliu'})
相当于:delete from student where sname='chenliu'

⑨删除集合

⑩退出shell
命令模式
输入exit
或者Ctrl+C
退出shell
命令模式


(三)使用Java API
对MongoDB
进行访问。
①Java MongoDB Driver
驱动jar
包已经下保存至’/home/hadoop/下载/’
目录下。

②打开Eclipse
,新建Java Project
。

引入驱动包mongodb-driver-3.8.0.jar
。

新建Class Average_grade


清空Average_grade.java
里面的代码,然后在该文件中输入完整的执行集合student
的增删改查操作的代码。

程序运行结束后会在底部的“Console
”面板中显示运行结果信息。

每次执行完程序,都可以返回shell
模式查看结果。如:在eclipse
执行完更新操作后,在shell
模式输入db.student.find()
,可以查看student
集合的所有数据。

(四)Redis
和传统的Mysql
数据库的区别在哪里?
①mysql
是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。redis
是NOSQL
,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
②mysql
作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O
操作,如果反复频繁的访问数据库。
第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;
第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。
③缓存就是数据交换的缓冲区(cache
),当浏览器执行请求时,首先会对在缓存中进行查找,如果存在,就获取;否则就访问数据库。缓存的好处就是读取速度快。
④redis
数据库就是一款缓存数据库,用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率。
(五)MongoDB
有哪些特点,和Mysql
数据库的区别在哪里?
特点:
Mongodb
是非关系型数据库(nosql
),属于文档型数据库。文档是mongoDB
中数据的基本单元,类似关系数据库的行,多个键值对有序地放置在一起便是文档,语法有点类似javascript
面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。
存储方式:虚拟内存+持久化。 查询语句:是独特的Mongodb
的查询方式。 适合场景:事件的记录,内容管理或者博客平台等等。
架构特点:可以通过副本集,以及分片来实现高可用。
数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。
成熟度与广泛度:新兴数据库,成熟度较低,Nosql
数据库中最为接近关系型数据库,比较完善的DB
之一,适用人群不断在增长。
区别:
MongoDB
还有一个最大的缺点,就是它占用的空间很大,在MongoDB
中频繁的进行数据增删改时,如果记录变了,例如数据大小发生了变化,这时候容易产生一些数据碎片,出现碎片引发的结果,一个是索引会出现性能问题。
MySQL
与MongoDB
都是开源的常用数据库,但是MySQL
是传统的关系型数据库,MongoDB
则是非关系型数据库,也叫文档型数据库,是一种NoSQL
的数据库。它们各有各的优点,关键是看用在什么地方。所以我们所熟知的那些SQL
(全称Structured Query Language
)语句就不适用于MongoDB
了,因为SQL
语句是关系型数据库的标准语言。