第122天学习打卡(Redis Nosql概述 Redis 入门)

Nosql概述

为什么要用Nosql

关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。

NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。

image-20210510143246689

DAL:数据访问层

90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够!
那时,更多的去使用静态网页Html,服务器根本没有太大的压力!

思考一下,这种情况下:整个网站的瓶颈是什么?

1.数据量如果太大,一个机器放不下

2.数据的索引(B + Tree),一个机器内存也放不下

3.访问量(读写混合),一个服务器承受不了

只要开始出现以上三种情况之一,那么就必须晋级。

2.Memcached(缓存) + MySQL +垂直拆分(读写分离)

memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。

网站80%的情况都是在读,每次都要去查询数据库的话就十分麻烦!,所以希望减轻数据的压力,我们可以使用缓存来保证!

发展过程:优化数据结构和索引–>文件缓存(IO)–>Memcached

image-20210510145127180

3.分库分表 + 水平拆分 + MySQL集群

本质:数据库(读,写)

早些年:MyISAM:表锁,十分影响效率!高并发下就会出现严重的锁问题

转战Innodb:行锁

慢慢的就开始使用分库分表来解决写的压力!

  1. InnoDB可借由事务记录档(Transaction Log)来恢复程序崩溃(crash),或非预期结束所造成的数据错误;而MyISAM遇到错误,必须完整扫描后才能重建索引,或修正未写入硬盘的错误。InnoDB的修复时间,大略都是固定的,但MyISAM的修复时间,则与数据量的多少成正比。相对而言,随着数据量的增加,InnoDB会有较佳的稳定性。
  2. MyISAM必须依靠操作系统来管理读取与写入的缓存,而InnoDB则是有自己的读写缓存管理机制。(InnoDB不会将被修改的数据页立即交给操作系统)因此在某些情况下,InnoDB的数据访问会比MyISAM更有效率。
  3. InnoDB目前并不支持MyISAM所提供的压缩与terse row formats,所以对硬盘与高速缓存的使用量较大。因此MySQL从5.0版开始,提供另一个负载较轻的格式,他可减少约略20%的系统负载,而压缩功能已项目于未来的新版中推出。
  4. 当操作完全兼容ACID(事务)时,虽然InnoDB会自动合并多个连接,但每次有事务产生时,仍至少须写入硬盘一次,因此对于某些硬盘或磁盘阵列,会造成每秒200次的事务处理上限。若希望达到更高的性能且保持事务的完整性,就必使用磁盘缓存与电池备援。当然InnoDB也提供数种对性能冲击较低的模式,但相对的也会降低事务的完整性。而MyISAM则无此问题,但这并非因为它比较先进,这只是因为它不支持事务。

image-20210510145739061

4.如今的年代

MySQL等关系型数据库就不够用了,因为数据量很多,变化很快!

目前一个基本的互联网项目

image-20210510151622651

为什么要用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中文官方网站

image-20210510170836450

image-20210510182828527

注意:Window在Github上下载(停更很久了)

Redis推荐都是在Linux服务器上搭建的, 我们是基于Linux学习的

Windows安装

1.下载安装包

Releases · dmajkic/redis · GitHub

2.下载完得到的压缩包:

image-20210510180934003

3.解压到自己电脑上的环境目录下就可以了,解压后的目录:

image-20210510181337717

4.开启Redis,双击运行服务即可!
image-20210510181637602

5.使用redis客户端连接redis(服务端不要关,开启)

image-20210510182134945

Window下使用确实简单,但是Redis推荐我们使用Linux去开发使用。

Linux安装

1.下载安装包!redis-6.2.3.tar.gz

Xshell命令失效的解决办法:

image-20210510184127630

解决办法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就可保存退出

image-20210510194818089

2.解压Redis的安装包! 程序建议放在/opt目录下。

image-20210510195338888

image-20210510195422022

3.进入解压后的文件,可以看到我们redis的配置文件。

image-20210510195627069

4.基本的环境安装

yum install gcc-c++
gcc -v  查看版本

image-20210510203715041

image-20210510200114481

然后执行:make命令 这个命令会把你所需要的文件都配置好

之后再执行一下make命令:

image-20210510200542357

再make install一下,确认所有的都安装完毕

image-20210510200655942

安装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版本。(不知道测试会不会失败 ,失败的话在回来修改)

image-20210510215901519

image-20210510215809613

image-20210510215934956

5.redis的默认安装路径usr/local/bin

image-20210510201247023

6.将redis配置文件。复制到我们当前目录下

image-20210510201812802

修改了配置文件之redis.conf后,再次使用vim redis.conf 出现以下界面

image-20210511155008251

解决办法: 按照上面创建文件的步骤再次创建一个文件然后把redis.conf移入这个文件之后按照步骤执行就可以了 ,而且使用vim redis.conf命令也可以查看相应的配置

再次创建使用的命令:

image-20210511155319736

[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

image-20210510210643042

输入完这个命令后,会出现一系列信息,要修改的话按住i后就可以修改了

image-20210510211045141

然后点击esc键之后输入:wq 保存退出

8.启动redis服务

[root@kuangshen bin]# pwd/usr/local/bin[root@kuangshen bin]# redis-server kconfig/redis.conf

通过指定的配置文件启动服务:

image-20210510214701155

redis6后台没有输出, ps -ef可验证启动成功 6版本redis后台启动没有提示

ps -ef:查看所有的进程

image-20210510215459163

9.使用redis-cli进行连接测试

image-20210510215409065

10.查看redis进程是否开启

[root@kuangshen ~]# ps -ef|grep redis

image-20210510220536843

11 如何关闭Redis服务呢?

shutdown

127.0.0.1:6379> shutdownnot connected> exit

image-20210510220755134

12 再次查看进程是否存在

image-20210510221154546

B站学习网址:【狂神说Java】Redis最新超详细版教程通俗易懂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值