单机mysql时代:
90年代,一个基本的网站访问量不会太大,单个数据库足够!
更多的使用静态网页html
网站瓶颈:
缓存时代:
memcached(缓存)+mysql+读写分离(垂直拆分)
网站百分之80情况都是在读,每次都要去数据库查询太麻烦,减轻数据库的压力,可以使用缓存来保证效率(Cache)-------解决读的问题
发展过程:优化Mysql底层结构和索引–>文件缓存(IO操作)—>Memcached 当时最热门的技术!
分库分表+水平拆分+mysql集群:
技术和业务发展同时,对技术要求也越来越高
本质: 数据库(读、写)
早些年 MyISAM:表锁,影响效率,高并发下出现严重的锁问题
早些年Innodb:行锁
慢慢地使用分库分表来解决写的压力!并没有多少公司使用
Mysql集群,很好满足了个别需求
最近的年代:
2010-2020 技术发展迅速(定位、音乐、热榜)
Mysql等关系型数据库就不够用了,数据量很多,变化很快
目前一个基本的互联网项目:
为什么要用Nosql
这时候可以使用Nosql数据库处理以上的情况!
NoSQL
NoSQL=not only sql
SQL:表格,行,列
泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区!
NoSQL在当今大数据时代发展迅速,REDIS发展是最快的,、
NoSQL特点
方便扩展(数据之间没有关系,很好扩展,没有耦合性)
大数据量下的高性能(redis一秒可以写8W次,可以读取11w次,NoSQL的缓存级别,是一种细粒度的缓存,性能会比较高!)
多类型(不需要事先设计数据库!随取随用!如果是数据量十分大的表,很多人无法设计)
传统RDBM和NoSQL:
结构化组织
SQL
数据和关系都存在单独的表中
数据操作语言,数据定义语言,
严格的一致性
基础的事务
…
不仅仅是数据
没有固定的查询语言
键值对存储,列存储,文档存储,图形数据库(社交关系)
最终一致性
CAP定理、 BASE (异地多活)初级架构师!
基本的高性能、高可用、高可扩展
…
扩展:大数据的3v和3高
描述问题:海量、多样、实时
程序要求:高并发、高可用、高性能
KV键值对
文档型数据库(bson格式json)
MongoDB(一般必须掌握)
基于分布式文件存储的数据库,C++编写,处理大量的文档!
是一个介于关系型数据库和非关系型数据库中间的产品,是非关系型数据库中功能最丰富的,最像关系型数据库的!
ConthDB
列存储数据库
图形关系数据库
不是放图片的,是放关系的:朋友圈社交网络、广告推荐!
Ne04j, infoGrid
NoSQL的对比
redis–Remote Dictionary Server
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。免费且开源,当前最热门的NoSql之一
能干嘛?
内存存储、持久化,内存中是断电即失去,所以说持久化很重要(rdb/aof)
效率高、可以用于高速缓存
发布订阅系统
地图信息分析
计时器、计数器(浏览量)
…
特性
学习中需要用到的东西
下载安装包 https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100
解压到特定文件夹
默认端口:6379
测试连接:
windows下使用确实简单,但是推荐使用linux去开发使用
redis-6.0.6.tar.gz
并进入
tar -zxvf redis-6.0.6.tar.gz
配置文件:redis.conf
yum install gcc-c++
gcc -v
make
(需要一点时间)报错,原因分析:gcc版本过低,升级一下
# 升级gcc版本
$ yum -y install centos-release-scl
$ yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
$ scl enable devtoolset-9 bash
# 升级后查看下版本
$ gcc -v
重新执行make
make install
(也可以不用执行,确认一下安装)所有东西已安装好了
Redis默认安装路径:/usr/local/bin
复制Redis配置文件到当前目录下
# 创建配置文件文件夹并复制配置文件
$ mkdir hconfig
$ cp /opt/redis-6.0.6/redis.conf hconfig
之后就使用这个配置文件进行启动
Redis默认不是后台启动的,需要修改配置文件
# 修改daemonize为yes
$ vim redis.conf
启动Redis服务
通过指定的配置文件启动服务
redis-server hconfig/redis.conf
测试连接
使用Redis客户端进行连接
# 连接
$ redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name yunmx # 设置一个key
OK
127.0.0.1:6379> get name # 读取一个key
"yunmx"
127.0.0.1:6379> keys * # 查询所有的key
1) "name"
127.0.0.1:6379>
查看Redis的进程是否开启
ps -ef |grep redis
关闭redis服务
shutdown
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> shutdown
not connected> exit
官方自带的性能测试工具—>
redis-benchmark
命令参数:
简单测试:
# 测试100个并发连接,每个并发20个请求
$ redis-benchmark -h localhost -p 6379 -c 100 -n 20
查看分析:
====== PING_INLINE ======
100000 requests completed in 1.46 seconds # 100000次ping请求在1.46s内完成
100 parallel clients # 100的并发量
3 bytes payload # 3字节数据写入
keep alive: 1 # 保证一台服务器测试(单机性能)
host configuration "save": 900 1 300 10 60 10000
host configuration "appendonly": no
multi-thread: no
0.00% <= 0.5 milliseconds # 0.5毫秒内完成百分之0的请求
1.37% <= 0.6 milliseconds
11.42% <= 0.7 milliseconds
23.22% <= 0.8 milliseconds
35.29% <= 0.9 milliseconds
47.60% <= 1.0 milliseconds
60.01% <= 1.1 milliseconds
72.40% <= 1.2 milliseconds
84.82% <= 1.3 milliseconds
94.78% <= 1.4 milliseconds
97.65% <= 1.5 milliseconds
98.50% <= 1.6 milliseconds
98.95% <= 1.7 milliseconds
99.28% <= 1.8 milliseconds
99.51% <= 1.9 milliseconds
99.67% <= 2 milliseconds
99.99% <= 3 milliseconds
100.00% <= 3 milliseconds # 3毫秒内完成100%的请求(100000)
68587.11 requests per second # 平均每秒完成的请求数