NoSQL数据库简介
技术发展
Web 1.0时代
数据访问量有限,用高性能的单点服务器可以解决大部分问题。
Web 2.0时代
随着Web 2.0时代的到来,用户访问量大幅度提升,同时产生了大量的用户数据。加上智能移动设备的普及,所有的互联网平台都面临了巨大的性能挑战。
如何解决CPU及内存的压力
方案一:存储在Cookie中
- 不安全
- 网络负担重效率低
方案二:存在文件服务器或数据库里
- 大量IO读写,效率低。
方案三:Session复制
- Session数据冗余,且服务器节点越多浪费越大。
方案四:缓存数据库
- 完全在内存中,速度快,且数据结构简单
解决IO压力
打破了传统关系型数据库以业务逻辑为依据的存储模式,而针对不同数据结构类型改为以性能为最优先的存储方式。
NoSQL数据库概述
NoSQL(NoSQL = Not Only SQL),意即:不仅仅是SQL,泛指非关系型的数据库。
NoSQL不依赖于业务逻辑方式存储,而以简单的key-value模式存储,因此大大的增加了数据库的扩展能力。
- 不遵循SQL标准
- 不支持ACID
- 远超于SQL的性能
适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
不适用场景
- 需要事务支持。
- 基于sql的结构化查询存储,处理复杂的关系,需要即席查询。
- 用不着sql和用了sql也不行的情况,请考虑用NoSql。
NoSQL数据库
Memcache
- 很早出现的NoSql数据库
- 数据都在内存中,一般
不持久化
- 支持简单的key-value模式,支持
类型单一
- 一般是作为
缓存数据库
辅助持久化的数据库
Redis
- 几乎覆盖了Memcache的绝大部分功能
- 数据都在内存中,
支持持久化
,主要用于备份恢复 - 除了支持简单的key-value模式,还
支持多种数据结构的存储
,比如list、set、hash、zset等 - 一般是作为
缓存数据库
辅助持久化的数据库
MongoDB
- 高性能、开源、模式自由(Schema free)的
文档型数据库
- 数据都在内存中,如果内存不足,把不常用的数据保存到硬盘
- 虽然是key-value模式,但是对value(尤其是
Json
)提供了丰富的查询功能 - 支持二进制数据及大型对象
- 可以根据数据的特点
代替RDBMS
,成为独立的数据库,或者配合RDBMS,存储特定的数据。
Redis
Redis概述
Redis是一个开源的key-value存储系统。
和Memcache类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set —有序集合)和hash(哈希类型)。
这些数据类型都支持push / pop 、add / remove 及取交集并集和差集及更丰富的操作,这些操作都是原子性
的。
在此基础上,Redis支持各种不同方式的排序。与Memcache一样,为了保证效率,数据都是缓存在内存
中。区别在于Redis会周期性
的把更新的数据写入磁盘
或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)
同步。
应用场景
配合关系型数据库做高速缓存
高频次,热门访问的数据,降低数据库IO。
分布式架构,做Session共享。
多样的数据结构存储持久化数据
Redis安装
Redis官方网站:http://redio.io
Linux下安装Redis(以CentOs7为例)
在CentOs中下载安装最新的gcc编译器(在安装虚拟机时,勾选开发工具可忽略)
将Windows中下载好的redis-6.2.6.tar.gz上传至Linux的家目录下(cmd)
scp -r redis-6.2.6.tar.gz root@192.168.36.128:/root
登入CentOs7,解压/root下的redis-6.2.6.tar.gz,进入到解压后的文件中,用make命令进行编译
tar -xvzf redis-6.2.6.tar.gz
cd redis-6.2.6
make
make install
make install执行成功后,安装目录在/usr/local/bin下。
命令 | 功能 |
---|---|
redis-benchmark | 性能测试工具 |
redis-check-aof | 修复有问题的AOF文件 |
redis-check-dump | 修复有问题的dump.rdb文件 |
redis-sentinel | Redis集群使用 |
redis-server | Redis服务器启动命令 |
redis-cli | 客户端,操作入口 |
服务启动
前台启动(不推荐)
cd /usr/local/bin
redis-server
不推荐使用,只能在前台启动,即命令行窗口不能关闭,否则服务器停止。
后台启动
拷贝一份redis.conf到/etc下(其他目录也可)
cd redis-6.2.6
cp redis.conf /etc/redis.conf
cd /etc
chmod 755 redis.conf
vi redis.conf
---> 将daemonize no 改成 yes
后台启动
cd /usr/local/bin
redis-server /etc/redis.conf
访问客户端
cd /usr/local/bin
redis-cli
Redis知识介绍
默认16个数据库,类似数组下标从0开始,初识默认使用0号库
。
使用命令select <dbid>来切换数据库。如 select 8。
密码都是统一的,所有库是一样的密码。
dbsize
查看当前数据库Key的数量/
flushdb
清空当前库,flushall
通杀全部库。
Redis采用单线程+多路IO复用技术
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。
Redis与Memcache的三点不同:
- 支持多数据类型
- 支持持久化
- 单线程+多路IO复用
注:Memcache采用多线程 + 锁。