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

    xiaoxiao2022-07-07  186

    一、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 向集合添加一个或多个成员

    最新回复(0)