第1章 NoSQL
1.1 NoSQL数据库
1.1.1 NoSQL是什么
(1)NoSQL(Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。
(2)NoSQL不拘泥于关系型数据库的设计范式,放弃了通用的技术标准,为某一领域特定场景而设计,从而使性能、容量、扩展性都达到了一定程度的突破。
1.1.2 NoSQL的特点
(1)不遵循SQL标准
(2)不支持ACID
(3)远超于SQL的性能。
1.1.3 NoSQL的适用场景
(1)对数据高并发的读写
(2)海量数据的读写
(3)对数据高可扩展性的
1.1.4 NoSQL的不适用场景
(1)需要事务支持
(2)基于sql的结构化查询存储,处理复杂的关系,需要即席查询。
(3)用不着sql的和用了sql也不行的情况,请考虑用NoSql
1.2 NoSQL家族
1)Memcached
(1)很早出现的NoSQL数据库
(2)数据都在内存中,一般不持久化
(3)支持简单的key-value模式,数据类型支持单一
(4)一般是作为缓存数据库辅助持久化的数据库
2)Redis
(1)几乎覆盖了Memcached的绝大部分功能
(2)数据都在内存中,支持持久化(写到磁盘),主要用作备份恢复
(3)支持丰富的数据类型,例如 string 、 list 、 set、zset、hash等
(4)一般是作为缓存数据库辅助持久化的数据库
缓存:临时存储
假如有很多客户端对MySQL进行每秒1000W次查询,MySQL肯定扛不住这么高的并发请求【性能有上限】,将MySQL的数据同步到Redis中,让先请求客户端对Redis先进行查询,如果没有就查询MySQL然后同步到Redis中,后面的客户端就可以对Redis进行查询!Redis 每秒100W ops,性能非常强大!
3)mongoDB
(1)高性能、开源、模式自由的文档型数据库(网页中的XML JSON数据)
(2)数据都在内存中,如果内存不足,把不常用的数据保存到硬盘
(3)虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能
(4)支持二进制数据及大型对象
(5)可以根据数据的特点替代RDBMS(关系数据库管理系统),成为独立的数据库。或者配合RDBMS,存储特定的数据
4)HBase
(1)Hbase是Hadoop项目的数据库,主要用于对大量数据进行随机、实时的读写操作.
(2)Hbase能支持到数十亿行 × 百万列的数据表
5)Cassandra
(1)Cassandra用于管理由大量商用服务器构建起来的庞大集群上的海量数据集(PB级)
6)Neo4j
(1)Neo4j是基于图结构的数据库,一般用于构建社交网络、交通网络、地图等
第2章 Redis简介
2.1 Redis官网
(1)Redis官方网站 http://Redis.io
(2)Redis中文官方网站 http://www.Redis.net.cn(山寨网站)
Redis也可以做流式引擎(不过大数据领域一般选择kafka)以及消息中间件
2.2 Redis是什么
(1)Redis是一个开源的key-value存储系统。 不用建库也不用建表
(2)它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set)和hash(哈希类型)。
(3)Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件 支持持久化
(4)支持高可用和集群模式。
2.3 Redis的应用场景
2.3.1 配合关系型数据库做高速缓存
(1)高频次,热门访问的数据,降低数据库IO
(2)经典的Cache Aside Pattern(旁路缓存模式)
2.3.2 大数据场景
1)缓存
(1)高频次
(2)读写时效性高
(3)总数据量不大
(4)临时性
(5)用key查询
2)数据库
(1)高频次写入
(2)高频次查询
(3)总数据量不大,且对丢失数据不敏感
2.3.3 利用其多样的数据结构存储特定的数据
(1)最新N个数据 通过List实现按自然事件排序的数据
(2)排行榜,TopN 利用zset(有序集合)
(3)时效性的数据,比如手机验证码 Expire过期
(4)计数器,秒杀 原子性,自增方法INCR、DECR 防止超卖!
(5)去除大量数据中的重复数据 利用set集合
(6)构建队列利用list集合
(7)发布订阅消息系统 pub/sub模式
第3章 Redis安装
3.1 关于Redis版本
不用考虑在Windows环境下对Redis的支持,Redis官方没有提供对Windows环境的支持,是微软的开源小组开发了对Redis对Windows的支持 很多(淘宝 微信等)后台都是Redis
3.2 安装
1)安装新版gcc编译器(大部分数据库都是C语言编写,需要gcc)
在102机器安装Redis就在102上安装gcc
[aa ~]$ sudo yum -y install gcc-c++
2)上传redis-6.2.1.tar.gz安装包到/opt/software目录下
3)解压redis-6.2.1.tar.gz到/opt/module目录下 (跟着视频来,老师解压到software)
[aa software]# tar -zxvf redis-6.2.1.tar.gz -C /opt/module/
tar -zxvf redis-6.2.1.tar.gz 解压到当前目录
4)之后进入安装包的src目录,编辑Makefile文件,修改软件安装路径如下:
[aa src]$ vim Makefile
#修改如下
PREFIX?=/home/aa
[aa src]$ make && make install
3.3 查看安装目录 /home/aa/bin
(1)Redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何(服务启动起来后执行)
(2)Redis-check-aof:修复有问题的AOF文件
(3)Redis-check-dump:修复有问题的RDB文件
(4)Redis-sentinel:启动Redis哨兵服务
(5)redis-server:Redis服务器启动命令
(6)redis-cli:客户端,操作入口
3.4 Redis的启动
1)拷贝一份redis.conf配置文件到工作目录
[aa ~]$ mkdir myredis
[aa ~]$ cd myredis
[aa myredis]$ cp /opt/module/redis-6.2.1/redis.conf .
2)绑定主机IP,修改bind属性
[aa myredis]$ vim redis.conf
bind 0.0.0.0
3)指定配置文件进行启动 启动服务端
[aa myredis]$ redis-server redis.conf
3.5 客户端访问
1)使用redis-cli 命令访问启动好的Redis,默认端口为6379
[aa myredis]$ redis-cli
127.0.0.1:6379>
- 服务端关闭:1 在redis服务端CTRl+C 2 优雅关机,客户端执行shutdown
2)如果有多个Redis同时启动,或者端口做了修改,则需指定端口号访问
[aa myredis]$ redis-cli -p 6379
127.0.0.1:6379>
3)如果访问非本机redis,需要指定host来访问
[aa myredis]$ redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379>
4)通过 ping 命令测试验证
127.0.0.1:6379> ping
PONG
windows的Redis客户端进行访问
3.6 关闭Redis服务
如果还未通过客户端访问,可直接 redis-cli shutdown
[aa@hadoop102 myredis]$ redis-cli shutdown
如果已经进入客户端,直接 shutdown即可.
127.0.0.1:6379> shutdown
Jps是看不到redis的相关进程! Jps是java process status
3.6.1查看redis进程 ps -ef | grep redis
杀死进程!
kill -9 6463