您的位置:首页 > 数据库 > Redis

实验五 NoSQL数据库—Redis和MongoDB安装配置

2019-05-22 20:39 696 查看

一、NoSQL简述

NoSQL数据库,顾名思义就是打破了传统关系型数据库的范式约束。很多NoSQL数据库从数据存储的角度看也不是关系型数据库,而是key-value数据格式的hash数据库。

NoSQL是指“notonly sql”,其特点是非关系型,分布式,开源,可水平扩展,模式自由,支持replication,简单的API,最终一致性(相对于即时一致性,最终一致性允许有一个“不一致性窗口”,但能保证最终的客户都能看到最新的值)。

二、MongoDB

2.1 MongoDB介绍

MongoDB 是一个是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

2.2 安装MongoDB

MongoDB安装很简单,无需下载源文件,可以直接用apt-get命令进行安装。

2.2.1打开终端,输入以下命令:

sudo apt-get install mongodb

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

mongo -version

输出版本信息,表明安装成功

2.2.3启动和关闭mongodb命令如下:

service mongodb start
service mongodb stop

默认设置MongoDB是随Ubuntu启动自动启动的。

2.2.4输入以下命令查看是否启动成功:

pgrep mongo -l #注意:-l是英文字母l,不是阿拉伯数字1

2.2.5卸载MongoDB

sudo apt-get --purge remove mongodb mongodb-clients mongodb-server

2.3 使用MongoDB

2.3.1 shell命令模式

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

MongoDB 存储的文档记录是一个 BSON 对象,类似于 JSON 对象,由键值对组成。比如一条用户记录:

{
name: “Aiden”,
age: 30,
email: "luojin@simplecloud.cn"
}

每一个文档都有一个 id 字段,该字段是主键,用于唯一的确定一条记录。如果往 MongoDB 中插入数据时没有指定 id 字段,那么会自动产生一个 id 字段,该字段的类型是 ObjectId,长度是 12 个字节。在 MongoDB 文档的字段支持字符串,数字,时间戳等类型。一个文档最大可以达到 16M, 可以存储相当多的数据。

2.3.2常用操作命令:

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

1)先尝试往 MongoDB 中插入一条数据:

$ mongo

use shiyanlou
db.user.insertOne({name: “Aiden”, age: 30, email: "123@163.com", addr: [“CD”, “SH”]})
{
“acknowledged” : true,
“insertedId” : ObjectId(“59a8034064e0acb13483d512”)
}
show databases;
admin 0.000GB
local 0.000GB
shiyanlou 0.000GB
show collections;
user

可以看到,在插入数据前使用 use 指令,切换到了 shiyanlou 数据库,尽管该数据库暂时不存在,但当我们插入数据后,该数据库就被自动创建了。show databases 和 show collection 分别显示了当前存在的数据库和当前数据库的所有文档集合。

2)查询数据可以使用 db.collection.find 方法,可以指定查询过滤条件:

db.user.find()
{ “_id” : ObjectId(“59a8034064e0acb13483d512”), “name” : “Aiden”, “age” : 30, “email” : "luojin@simplecloud.cn", “addr” : [ “CD”, “SH” ] }
{ “_id” : ObjectId(“59a8034564e0acb13483d513”), “name” : “lxttx”, “age” : 28, “email” : "lxttx@simplecloud.cn", “addr” : [ “BJ”, “CD” ] }
{ “_id” : ObjectId(“59a8034564e0acb13483d514”), “name” : “jin”, “age” : 31, “email” : "jin@simplecloud.cn", “addr” : [ “GZ”, “SZ” ] }
{ “_id” : ObjectId(“59a8034564e0acb13483d515”), “name” : “nan”, “age” : 26, “email” : "nan@simplecloud.cn", “addr” : [ “NJ”, “AH” ] }

db.user.find({name: “jin”})
{ “_id” : ObjectId(“59a8034564e0acb13483d514”), “name” : “jin”, “age” : 31, “email” : "jin@simplecloud.cn", “addr” : [ “GZ”, “SZ” ] }

上面例子中,我们先通过 db.user.find() 获取到了之前插入的全部数据。接着使用不同的过滤条件进行了查询,还可以发现查询数组中是否存在某一元素也非常方便,上面的例子中查询出了所有地址含有 CD 用户。

MongoDB 的查询功能非常强大,可以组合各种查询条件。更新数据主要通过 db.user.updateOne 或者 db.user.updateMany 方法,前者更新一条记录,后者更新多条记录:

db.user.updateOne(
… {name: “Aiden”},
… {$set: {age: 29, addr: [“CD”, “SH”, “BJ”]}}
… )
{ “acknowledged” : true, “matchedCount” : 1, “modifiedCount” : 1 }
db.user.find({name: “Aiden”})
{ “_id” : ObjectId(“59a8034064e0acb13483d512”), “name” : “Aiden”, “age” : 29, “email” : "123@163.com", “addr” : [ “CD”, “SH”, “BJ” ] }

可以看到成功的更新了一条记录。删除数据也非常简单,可以通过 db.user.deleteMany 或db.user.deleteOne 方法:

db.user.deleteMany({addr: “CD”})
{ “acknowledged” : true, “deletedCount” : 2 }
db.user.find()
{ “_id” : ObjectId(“59a8034564e0acb13483d514”), “user” : “jin”, “age” : 31, “email” : "jin@simplecloud.cn", “addr” : [ “GZ”, “SZ” ] }
{ “_id” : ObjectId(“59a8034564e0acb13483d515”), “user” : “nan”, “age” : 26, “email” : "nan@simplecloud.cn", “addr” : [ “NJ”, “AH” ] }

上面的命令成功的删除所有地址包含 “CD” 的用户,共删除了两条记录。

三、Redis

3.1 Redis简介

Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。
它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。
内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
简言之,Redis是一种面向“键/值”对数据类型的内存数据库,可以满足我们对海量数据的快速读写需求。
Redis是一款NoSQL产品。
官网:http://www.redis.io
或者:http://redis.cn/

3.2 Redis的特点

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的k-v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave主从模式的数据备份。

3.3 Redis的优势

性能极高
丰富的数据类型
原子性
丰富的特性——Redis还支持public/subscribe,通知,key过期等特性。

3.4 Redis应用

应用在高并发和实时请求的场景,
eg新浪微博
hash:关注列表,粉丝列表
string:微博数,粉丝数(避免使用select count(*) from...)
sorted set:
TopN,热门微博
还有github,stackoverflow也用到了redis

3.4 Redis安装配置

3.4.1 Redis安装

windows下直接解压即可使用,主要说明Linux下的安装方式 :
解压:
tar -zxvf soft/redis-3.2.0.tar.gz -C app/
重命名:
mv app/redis-3.2.0/ app/redis
编译:
make
安装:
make install PREFIX=/home/uplooking/app/redis

3.4.2 Redis配置

1)初始配置

修改redis.conf中的配置项
bind uplooking01
daemonize yes(后台运行)
logfile /opt/redis-3.2.0/logs/redis.log(日志文件,目录必须存在)

2) 启动服务

make完成之后,在redis-3.2.0/src目录下会出现编译后的redis服务器程序redis-server,还有用于测试的客户端程序redis-cli。
redis-3.2.0]$ src/redis-server redis.conf
当然,如果再执行了make install则会在指定安装目录下生成一个bin目录,同时也会有相关的命令用于操作Redis.

3)启动客户端

redis-3.2.0]$ src/redis-cli -h localhost -p 6379

4)关闭服务

ps -ef | grep redis

找到进程id后直接kill -9就可以了。

5)Redis配置查看

Redis的配置文件位于Redis的安装目录之下,文件名为redis.conf。可以通过config命令来查看或设置配置项。

查看
语法,Redis config命令格式如下:
redis localost:6379> config get config_set_name
eg: redis localost:6379> config get loglevel
1) “loglevel”
2) “notice”
使用*号获取所有配置项:redis localost:6379> config get *

编辑
可以通过修改redis.conf文件或使用config set命令来修改配置
基本语法:
redis localost:6379> config set conf_setting_name new_value
eg: redis localost:6379> config set loglevel “warning”
redis localost:6379> config get loglevel
1) “loglevel”
2) “warning” -->对当前服务有效,之后当服务重启之后,才会失效
Redis操作

3.5 向集合添加一个或多个成员

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: