第122天学习打卡(Redis Nosql概述 Redis 入门)
Posted doudoutj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第122天学习打卡(Redis Nosql概述 Redis 入门)相关的知识,希望对你有一定的参考价值。
Nosql概述
为什么要用Nosql
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。
DAL:数据访问层
90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够!
那时,更多的去使用静态网页html,服务器根本没有太大的压力!
思考一下,这种情况下:整个网站的瓶颈是什么?
1.数据量如果太大,一个机器放不下
2.数据的索引(B + Tree),一个机器内存也放不下
3.访问量(读写混合),一个服务器承受不了
只要开始出现以上三种情况之一,那么就必须晋级。
2.Memcached(缓存) + mysql +垂直拆分(读写分离)
memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。
网站80%的情况都是在读,每次都要去查询数据库的话就十分麻烦!,所以希望减轻数据的压力,我们可以使用缓存来保证!
发展过程:优化数据结构和索引–>文件缓存(IO)–>Memcached
3.分库分表 + 水平拆分 + MySQL集群
本质:数据库(读,写)
早些年:MyISAM:表锁,十分影响效率!高并发下就会出现严重的锁问题
转战Innodb:行锁
慢慢的就开始使用分库分表来解决写的压力!
- InnoDB可借由事务记录档(Transaction Log)来恢复程序崩溃(crash),或非预期结束所造成的数据错误;而MyISAM遇到错误,必须完整扫描后才能重建索引,或修正未写入硬盘的错误。InnoDB的修复时间,大略都是固定的,但MyISAM的修复时间,则与数据量的多少成正比。相对而言,随着数据量的增加,InnoDB会有较佳的稳定性。
- MyISAM必须依靠操作系统来管理读取与写入的缓存,而InnoDB则是有自己的读写缓存管理机制。(InnoDB不会将被修改的数据页立即交给操作系统)因此在某些情况下,InnoDB的数据访问会比MyISAM更有效率。
- InnoDB目前并不支持MyISAM所提供的压缩与terse row formats,所以对硬盘与高速缓存的使用量较大。因此MySQL从5.0版开始,提供另一个负载较轻的格式,他可减少约略20%的系统负载,而压缩功能已项目于未来的新版中推出。
- 当操作完全兼容ACID(事务)时,虽然InnoDB会自动合并多个连接,但每次有事务产生时,仍至少须写入硬盘一次,因此对于某些硬盘或磁盘阵列,会造成每秒200次的事务处理上限。若希望达到更高的性能且保持事务的完整性,就必使用磁盘缓存与电池备援。当然InnoDB也提供数种对性能冲击较低的模式,但相对的也会降低事务的完整性。而MyISAM则无此问题,但这并非因为它比较先进,这只是因为它不支持事务。
4.如今的年代
MySQL等关系型数据库就不够用了,因为数据量很多,变化很快!
目前一个基本的互联网项目
为什么要用NoSQL
用户的个人信息,社交网络,地理位置。用户自己产生的数据,用户日志等爆发式的增长,关系型数据库达到瓶颈。
这个时候就需要使用NoSQL,可以很好的处理以上问题。
什么是NoSQL
NoSQL:不仅仅是SQL
泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区,暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展的最快的,而且是我们必须要掌握的,
很多的数据类型用户的个人信息,社交网络,地理位置。这些数据类型的存储不需要一个固定的格式!不需要多余的操作就可以横向扩展的。
NoSQL特点
解耦!
1.方便扩展(数据之间没有关系,很好扩展!)
2.大数据量高性能(Redis一秒写8万次,读取11万,NoSQL的缓存记录级,是一种细粒度的缓存,性能比较高!)
3.数据类型是多样型的!(不需要事先设计数据库 ,随取随用!如果数据量十分大的表,很多人就无法设计了)
4.传统的关系型数据库 RDBMS 和NoSQL(非关系型数据库)
传统的RDBMS
- 结构化组织
- SQL
- 数据和关系都存在单独的表中
- 数据操作语言 数据定义语言
- 严格的一致性
- 基础的事务ACID原则
-...
Nosql
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库(社交关系)
- 最终一致性
- CAP定理和BASE(异地多活)初级架构师!
- 高性能 高可用 高可扩
- ...
-
五大基本数据类型
- String
- List
- Set
- Hash
- Zset
-
三种特殊数据类型
- geo
- hyperloglog
- bitmap
了解: 3V + 3高
大数据时代的3V: 主要是描述问题的
- 海量Volume
- 多样Variety
- 实时Velocity
大数据时代的3高:主要是对程序的要求
- 高并发
- 高可扩(随时水平拆分,机器不够了,可用扩展机器来解决)
- 高性能(保证用户体验和性能)
真正的公司的实践中:NoSQL + RDBMS
NoSQL的四大分类
KV:键值对:
-
新浪:Redis
-
美团:Redis + Tair
-
阿里、百度:Redis + memcache
文档数据库(bson格式和Json一样 只不过是二进制的json):
-
MongoDB(一般必须要掌握)
-
MongoDB是一个基于分布式文件存储的数据库 C++编写,主要用来处理大量的文档!
-
MongoDB是一个介于关系型数据库和非关系型数据中中间的产品!MongoDB是非关系型数据库中功能最丰富,最像关系型数据库的!
-
ConthDB
列存储数据库
- HBase
- 分布式文件系统
图关系数据库
- 它不是存图形,方的是关系,比如:朋友圈社交网络,广告推荐等。
- Neo4j InfoGrid
Redis入门
概述
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis能干嘛?
1.内存存储、持久化,内存中是断电即失的,所以说持久化很重要(rdb 原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化 、aof 原理是将Reids的操作日志以追加的方式写入文件)
2.效率高,可以用于高速缓存
3.发布订阅系统
4.地图信息分析
5.计时器、计数器(浏览量!)
…
特性
1.多样性的数据类型
2.持久化
3.集群
4.事务
…
学习中需要用到的东西
1.狂神的公众号:狂神说
2.官网:Redis
3.中文网:redis中文官方网站
注意:Window在Github上下载(停更很久了)
Redis推荐都是在Linux服务器上搭建的, 我们是基于Linux学习的
Windows安装
1.下载安装包
Releases · dmajkic/redis · GitHub
2.下载完得到的压缩包:
3.解压到自己电脑上的环境目录下就可以了,解压后的目录:
4.开启Redis,双击运行服务即可!
5.使用redis客户端连接redis(服务端不要关,开启)
Window下使用确实简单,但是Redis推荐我们使用Linux去开发使用。
Linux安装
1.下载安装包!redis-6.2.3.tar.gz
Xshell命令失效的解决办法:
解决办法1:输入以下命令就可以了 这个是临时的
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
解决办法2:
输入这个命令:
vim /etc/profile
修改配置文件:点击i就可以进行修改配置了
JAVA_HOME=/usr/java/jdk1.8.0_291-amd64
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
export CLASSPATH JAVA_HOME
然后按住esc键 然后:wq保存退出
修改配置文件出现的错误:E45: ‘readonly’ option is set (add ! to override)
解决办法:
输入下面两个语句:
输入 :set noreadonly
输入 :wq就可保存退出
2.解压Redis的安装包! 程序建议放在/opt目录下。
3.进入解压后的文件,可以看到我们redis的配置文件。
4.基本的环境安装
yum install gcc-c++
gcc -v 查看版本
然后执行:make命令 这个命令会把你所需要的文件都配置好
之后再执行一下make命令:
再make install一下,确认所有的都安装完毕
安装6.0以上版本需要升级gcc到5.3及以上,如下:升级到gcc 9.3:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。(不知道测试会不会失败 ,失败的话在回来修改)
5.redis的默认安装路径usr/local/bin
6.将redis配置文件。复制到我们当前目录下
修改了配置文件之redis.conf后,再次使用vim redis.conf 出现以下界面
解决办法: 按照上面创建文件的步骤再次创建一个文件然后把redis.conf移入这个文件之后按照步骤执行就可以了 ,而且使用vim redis.conf命令也可以查看相应的配置
再次创建使用的命令:
[root@kuangshen bin]# mkdir kconfig 这是创建一个kconfig文件
[root@kuangshen bin]# cp /opt/redis-6.2.3/redis.conf kconfig
[root@kuangshen bin]# cd kconfig/。。
[root@kuangshen kconfig]# ls
redis.conf
7.redis默认的不是后台启动的,修改配置文件!
vim redis.conf
输入完这个命令后,会出现一系列信息,要修改的话按住i后就可以修改了:
然后点击esc键之后输入:wq 保存退出
8.启动redis服务
[root@kuangshen bin]# pwd/usr/local/bin[root@kuangshen bin]# redis-server kconfig/redis.conf
通过指定的配置文件启动服务:
redis6后台没有输出, ps -ef可验证启动成功 6版本redis后台启动没有提示
ps -ef:查看所有的进程
9.使用redis-cli进行连接测试
10.查看redis进程是否开启
[root@kuangshen ~]# ps -ef|grep redis
11 如何关闭Redis服务呢?
shutdown
127.0.0.1:6379> shutdownnot connected> exit
12 再次查看进程是否存在
以上是关于第122天学习打卡(Redis Nosql概述 Redis 入门)的主要内容,如果未能解决你的问题,请参考以下文章
Python全栈100天学习笔记Day39 NoSQL入门及Redis概述
Python全栈100天学习笔记Day39 NoSQL入门及Redis概述
第277天学习打卡(知识点回顾, springboot redis自动配置)