NoSQL数据库,顾名思义就是打破了传统关系型数据库的范式约束。很多NoSQL数据库从数据存储的角度看也不是关系型数据库,而是key-value数据格式的hash数据库。
NoSQL是指“notonly sql”,其特点是非关系型,分布式,开源,可水平扩展,模式自由,支持replication,简单的API,最终一致性(相对于即时一致性,最终一致性允许有一个“不一致性窗口”,但能保证最终的客户都能看到最新的值)。
MongoDB 是一个是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB安装很简单,无需下载源文件,可以直接用apt-get命令进行安装。
输出版本信息,表明安装成功
默认设置MongoDB是随Ubuntu启动自动启动的。
输入mongo进入shell命令模式,默认连接的数据库是test数据库,在此之前一定要确保你已经启动了MongoDB,否则会出现错误,启动之后运行成功,如下截图: MongoDB 存储的文档记录是一个 BSON 对象,类似于 JSON 对象,由键值对组成。比如一条用户记录:
{ name: “Aiden”, age: 30, email: "luojin@simplecloud.cn" }
每一个文档都有一个 id 字段,该字段是主键,用于唯一的确定一条记录。如果往 MongoDB 中插入数据时没有指定 id 字段,那么会自动产生一个 id 字段,该字段的类型是 ObjectId,长度是 12 个字节。在 MongoDB 文档的字段支持字符串,数字,时间戳等类型。一个文档最大可以达到 16M, 可以存储相当多的数据。
$ 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 分别显示了当前存在的数据库和当前数据库的所有文档集合。
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是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。 它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。 内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。 简言之,Redis是一种面向“键/值”对数据类型的内存数据库,可以满足我们对海量数据的快速读写需求。 Redis是一款NoSQL产品。 官网:http://www.redis.io 或者:http://redis.cn/
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
找到进程id后直接kill -9就可以了。
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操作