🔗网课链接: 尚硅谷超经典Redis教程,redis实战,阳哥版从入门到精通
NoSQL入门、Redis入门介绍
NoSQL入门
入门概述
数据存储发展
为什么使用 NoSQL
1. 单机MySQL的问题
- 数据库量太大,单机放不下
- 数据索引的B+Tree内存放不下
- 访问量(读+写) 一个实例不能承受
2. Memcached + MySQL + 垂直拆分
通过文件缓存缓解数据库压力, 但是随着访问量增大,多台web机器通过文件缓存不能共享, 大量的小文件缓存带来了比较高的IO压力
3. Mysql 主从读写分离
使用主从复制技术来达到读写分离, 以提高读写性能和读库的可扩展性, Mysql的master-slave模式成为这个时候的网站标配了
4. 分表分库 + 水平拆分 + mysql集群
由于MyISAM使用表锁, 在高并发下会出现严重的锁问题, 大量的高并发MySQL引用开始使用InnoDB引擎代替MyISAM
5. MySQL扩展瓶颈
随着数据库的大小越来越大, 恢复数据库会变得缓慢, IO操作压力增加, 难以更改表结构 也就很难面临不同目的的应用
6. 为什么使用NoSQL
为了适应用户数据 WebApplicationData
NoSQL定义
Not Only SQL
泛指非关系型的数据库. NoSQL数据库的产生是为了解决大规模数据集合多重数据种类带来的挑战, 尤其是大数据引用难题, 包括超大规模的数据的存储. 比如谷歌facebook这一类平台收集的数据, 这些类型的数据存储不需要固定的模式, 无需多余操作就可以横向扩展
NoSQL应用
易扩展
NoSQL数据库种类繁多, 但是一个共同的特点都是去掉关系数据库的关系型特性
数据之间无关系, 这样就非常容易扩展, 也无形之间, 在架构的层面上带来了可扩展的能力.
大数据量高性能
多样灵活数据模型
增删改查变得简单
NoSQL使用
- KV
- Cache
- Persistence
- …
3V + 3高
大数据的3v
- Volume海量
- Variety多样
- Velocity实时
互联网的3高
- 高并发
- 高可扩
- 高性能
NoSQL数据模型简介
聚合模型
- kv键值
- Bson
- 列族
- 图形
NoSQL数据库的四大分类
- kv键值
- 文档型数据库 bson格式比较多:
- couchDB
- MongoDB
- 列存储数据库
- Cassandra
- 分布式文件系统
- 图关系数据库
- 存放关系类型: 朋友圈社交网络, 广告推荐
- 社交网络, 推荐系统等. 构建关系图谱
在分布式数据库中CAP原理CAP+BASE
ACID
- Atomicity
- Consistency
- Isolation
- Durability
CAP
- C: consistency
- A: availability
- P: partition tolerance
CAP的3进2: CAP的3者只可以满足两个
一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性
Consistency & Availability - 单点集群, 满足一致性, 可用性的系统, 通常可拓展性上不太强大 (RDBMS)
Consistency & Partition tolerance - 满足一致性, 分区容忍性的系统, 通常性能不是特别高 (MongoDB, HBase, Redis)
Availability & Partition tolerance - 满足可用性, 分区容忍性的系统, 通常可能对一致性要求低一些 (CouchDB, Cassandra, DynamoDB)
BASE
三个术语的缩写:
-
基本可用 Basically Available
-
软状态 Soft state
-
最终一致 Eventually consistent
它的思想是通过系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性的性能上改观. 缘由就在于大型系统往往由于地域分布和极高性能的要求, 不可能采用分布式食物来完成这些指标, 要想获得这些指标, 我们必须采用另外一种方式来完成, 这里BASE就是解决这个问题的办法
分布式+集群简介
分布式:
不同的多台服务器上部署不同的服务模块(工程), 他们之间通过 RPC/RMI (Remote Method Invocation) 之间通信和调用, 对外提供服务和组内协作
集群:
不同的多台服务器上面部署相同的服务模块, 通过分布式调度软件进行统一的调度, 对外提供服务和访问.
Redis入门介绍
入门概述
Redis: REmote DIctionary Server (远程字典服务器)
完全开源免费的, 用C语言编写的, 遵守BSD协议
是一个高性能(key/value)分布式内存数据库, 基于内存运行并支持持久化的NoSQL数据库
Redis 与其他 key-value 缓存产品有以下三个特点
- Redis支持数据的持久化, 可以将内存中的数据保持在磁盘中, 重启的时候可以再次加载进行使用
- Redis不仅仅支持简单的key-value类型数据, 同时还提供list, set, zset, hash等数据结构的存储
- Redis支持数据的备份, 即master-slave模式的数据备份
Redis 作用:
- 内存存储和持久化: redis支持异步将内存中的数据写到硬盘上, 同时不影响继续服务
- 取最新N个数据的操作,如: 可以将最新的10挑评论的ID放在Redis的list集合里面
- 模拟类似于HttpSession这种需要设定过期时间的功能
- 发布,订阅消息系统
- 定时器, 计数器
- …
Redis启动后杂项基础知识讲解
单进程
- 单进程模型来处理客户端的请求. 对读写等事件的响应. 是通过对epoll函数的包装来做到的. Redis的实际处理速度完全依靠主进程的执行效率.
- Epoll是Linux内核为处理大批量文件描述符而作了改进的epoll, 是linux下多路复用IO接口 select/poll 的增强版本, 它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率
默认16个数据库, 类似数组下表从零开始, 出事默认使用零号库
Select
: 命令切换数据库
Dbsize
: 查看当前数据库的key的数量
Flushdb
: 清空当前库
Flushall
: 通杀全部库
统一密码管理, 16个库都是同样密码, 要么都ok要么都不接受, Redis索引都是从零开始
默认端口是 6379