一,Nosql概述
- **灰度发布(又名金丝雀发布)**是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
为什么要用NoSQL!
- 用户的个人信息,社交网络,地理位置。用户自己产生的数据,用户日志等等爆发式增长! 这时候我们就需要使用NoSQL数据库的,
- Nosql 可以很好的处理以上的情况!
什么是NoSQL
NoSQL
- NoSQL = Not Only SQL (不仅仅是SQL)
- 关系型数据库:表格 ,行 ,列
- 泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其 是超大规模的高并发的社区!暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅 速,Redis是发展最快的,而且是我们当下必须要掌握的一个技术!
- 很多的数据类型用户的个人信息,社交网络,地理位置。这些数据类型的存储不需要一个固定的格式! 不需要多余的操作就可以横向扩展的 ! Map<String,Object> 使用键值对来控制!
NoSQL 特点
解耦!
1、方便扩展(数据之间没有关系,很好扩展!)
2、大数据量高性能(Redis 一秒写8万次,读取11万,NoSQL的缓存记录级,是一种细粒度的缓存,性
能会比较高!)
3、数据类型是多样型的!(不需要事先设计数据库!随取随用!如果是数据量十分大的表,很多人就无
法设计了!)
4、传统 RDBMS 和 NoSQL
传统的 RDBMS
- 结构化组织
- SQL
- 数据和关系都存在单独的表中 row col
- 操作语言,数据定义语言
- 严格的一致性
- 基础的事务
- .....
Nosql
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库(社交关系)
- 最终一致性,
- CAP定理和BASE (异地多活) 初级架构师!(狂神理念:只要学不死,就往死里学!)
- 高性能,高可用,高可扩
了解解:3V+3高
大数据时代的3V:主要是描述问题的
- 海量Volume
- 多样Variety
- 实时Velocity
大数据时代的3高:主要是对程序的要求
1. 高性能
2 高可扩(随时水平拆分,机器不够了,可以扩展机器来解决)
3. 高并发
真正在公司中的实践:NoSQL + RDBMS 一起使用才是最强的,阿里巴巴的架构演进!
技术没有高低之分,就看你如何去使用!(提升内功,思维的提高!)
NoSQL的四大分类
KV键值对:
- 新浪:Redis
- 美团:Redis + Tair
- 阿里、百度:Redis + memecache
文档型数据库(bson格式 和json一样):
-
MogoDB (一般必须要掌握)
- MongoDB 是一个基于分布式文件存储的数据库,C++ 编写,主要用来处理大量的文档!
- MongoDB是一个介于关系型数据库和非关系型数据中中间的产品! MongoDB 是非关系型数据库中功能最丰富,最像关系型数据库的!
-
ConthDB
列存储数据库
- HBase
- 分布式文件系统 J
图关系数据库
- 他不是存图形,放的是关系,比如:朋友圈社交网络,广告推荐!
- Neo4j, InfoGrid;
Redis入门
概述
Redis 是什么?
- Redis(Remote Dictionary Server ),即远程字典服务 !
- 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
- redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
- 免费和开源!是当下最热门的 NoSQL 技术之一!也被人们称之为结构化数据库!
Redis 能干嘛?
1、内存存储、持久化,内存中是断电即失、所以说持久化很重要(rdb、aof)
2、效率高,可以用于高速缓存
3、发布订阅系统
4、地图信息分析
5、计时器、计数器(浏览量!)
6、…
特性
1、多样的数据类型
2、持久化
3、集群
4、事务
…
学习中需要用到的东西
1、狂神的公众号:狂神说
2、官网:https://redis.io/
3、中文网:http://www.redis.cn/
4、下载地址:通过官网下载即可!
注意:Windows在 Github上下载(停更很久了!)
Redis推荐都是在Linux服务器上搭建的,我们是基于Linux学习!
redis默认端口是6379
Linux下redis安装
-
下载安装包! redis-5.0.8.tar.gz
-
解压Redis的安装包! 程序/opt
-
进入解压后的文件,可以看到我们redis的配置文件
4. 基本的环境安装
yum install gcc-c++ 注意,yum是centos的命令
make
make install
-
redis的默认安装路径 /usr/local/bin
-
将redis配置文件。复制到我们当前目录下
- redis默认不是后台启动的,修改配置文件!
- 启动Redis服务!
- 使用redis-cli 进行连接测试!
-
查看redis的进程是否开启!
-
如何关闭Redis服务呢? shutdown
- 再次查看进程是否存在
13. 后面会使用单机多Redis启动集群测试
性能测试
- redis-benchmark 是一个压力测试工具
- 官方自带的性能测试工具!
- redis-benchmak命令参数
测试:100个并发连接 100000请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
如何查看这些分析呢?
**
**
Redis基础知识
- Redis默认有16个数据库
- 默认使用的是第0个
127.0.0.1:6379> select 3 # 切换数据库
OK
127.0.0.1:6379[3]> DBSIZE # 查看DB大小!
(integer) 0
- 查看数据库所有的key(是指当前16个数据库中的1个)
127.0.0.1:6379[3]> keys * # 查看数据库所有的key
1) "name"
- 清除当前数据库 flushdb
- 清除全部数据库的内容 FLUSHALL
Redis 是单线程的!
- 明白Redis是很快的,官方表示,Redis是基于内存操作,CPU不是Redis性能瓶颈,Redis的瓶颈是根据
机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了!所有就使用了单线程了! - Redis 是C 语言写的,官方提供的数据为 100000+ 的QPS(每秒查询率),完全不比同样是使用 key-vale的Memecache差!
Redis 为什么单线程还这么快?
- 误区1:高性能的服务器一定是多线程的?
- 误区2:多线程(CPU上下文会切换!)一定比单线程效率高
- 先去CPU>内存>硬盘的速度要有所了解!
**核心:**redis 是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程
(CPU上下文会切换:耗时的操作!!!),对于内存系统来说,如果没有上下文切换效率就是最高。多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案。