文章目录
- NoSQL 数据库
- Redis 数据库
配套视频课: https://www.bilibili.com/video/BV1Rv41177Af/
NoSQL 数据库
1、NoSQL 定义
- NoSQL(Not Only SQL)泛指非关系型数据库。
- NoSQL不依赖业务逻辑方式存储,而以简单的key-value模式存储,大大增加了数据库的扩展能力。
- NoSQL数据库与业务无关,聚焦数据,目的是提高性能。
- 支持内存和持久化存储。数据保存在内存中可以提高效率,内存中数据不持久,硬盘数据持久。
- NoSQL数据库作用:解决服务器CPU负载及内存压力、解决数据库IO压力。
- 特点
- 不遵循SQL标准。
- 不支持ACID。
- 远超于SQL的性能。
2、NoSQL适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
3、NoSQL不适用场景
- 需要事务支持
- 基于sql的结构化查询存储,处理复杂的关系,需要即席查询。
- (用不着sql的和用了sql也不行的情况,请考虑用NoSql)
4、NoSQL数据库产品
- Memcache
很早出现的NoSql数据库
数据都在内存中,一般不持久化
支持简单的key-value模式,支持类型单一
一般是作为缓存数据库辅助持久化的数据库
- Redis
几乎覆盖了Memcached的绝大部分功能
数据都在内存中,支持持久化,主要用作备份恢复
支持多种数据结构的存储,比如 list、set、hash、zset等
一般是作为缓存数据库辅助持久化的数据库
- MongoDB
高性能、开源、模式自由(schema free)的文档型数据库(类似json)
数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘
虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能
支持二进制数据及大型对象
可以根据数据的特点替代RDBMS ,成为独立的数据库。或者配合RDBMS,存储特定的数据。
- Hbase
HBase 是一个开源的、分布式的、版本化的 NoSQL 数据库
利用 Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)提供分布式数据存储。
与传统的关系型数据库类似,HBase 也以表的形式组织数据,表也由行和列组成;不同的是,HBase 有列族的概念,它将一列或者多列组织在一起,HBase 的每一个列都必须属于某个列族。
用于需要对非常庞大的数据进行随机、实时的读写操作的场景中。可以用普通的计算机处理超过10亿行数据,还可处理有数百万列元素的数据表。
Redis 数据库
1、概述
- Redis 数据库是一个开源的key-value存储系统,默认端口号6379。
端口6379 来源于女星Alessia Merz
- 数据类型:
存储的value支持五种数据类型:string(字符串)、list(链表)、set(集合)、zset(sorted set,有序集合)、hash(哈希类型)。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
- Redis支持各种不同方式的排序。
- 存储:
- 与memcached一样,为了保证效率,数据都是缓存在内存中。
- Redis会周期性把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
- 并且在此基础上实现了master-slave(主从)同步。
- 默认16个数据库,类似数组下标从0开始,初始默认使用0号库。
- 统一密码管理,所有库同样密码。
切换数据库命令:select dbid
dbsize 查看当前数据库的key的数量
flushdb 清空当前库
flushall 通杀全部库
2、应用场景
- 配合关系型数据库做高速缓存
高频次,热门访问的数据,降低数据库IO
分布式架构,做session共享
- 多样的数据结构存储持久化数据
3、Redis 与Memcache三点不同
- Redis 支持多数据类型
- Redis 支持持久化
- Redis 单线程+多路IO复用
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态。
比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。