redis知识点总集

前言

本文为总集,详细讲述了redis的概念与各个命令用法和环境配置等。

一、关系型数据库与非关系型数据库的区别

关系型数据库
特点:
1、数据必须符合表结构
2、表格格式为行+列
3、事务的aicd(一致性、隔离性、持久性、原子性)
4、纵向扩展(将硬件与内核数进行优化升级)
非关系型数据库
特点:
1、高并发,高可用
2、没有固定表结构
3、横向扩展(增加服务器节点数量从而达到能够处理高并发)

二 、Redis 简介

redis端口号:6379
1、基于内存:数据主要存储在内存中,读写速度极快,写入速度达到80000次每秒,读速度达到110000次没秒。
2、支持多种数据结构:除了基础的字符串(String),还支持哈希(Hash)、列表(List)、集合(Set)、有序集合(ZSet)等。
3、持久化:可以将内存中的数据持久化到磁盘,避免重启后数据丢失(两种方式:RDB 快照、AOF 日志)。
4、单线程模型:核心操作是单线程的,避免了线程切换开销,同时通过 I/O 多路复用保证高并发。

三 redis 基本命令与应用

3.1 安装redis

3.1.1 解压redis

tar -zxvf redis压缩包.tar.gz -C /opt ————————将redis解压到opt目录下
在这里插入图片描述

3.1.2 安装redis依赖包

yum install -y gcc gcc-c++ make ————————安装redis依赖包

3.1.3 编译安装redis

cd /opt/redis文件 ————————移动到Redis文件下
make && make prefix=/usr/local/redis install ————————编译安装redis(不需要进行配置)
cd

3.1.4 执行脚本文件并确认redis配置

sh /opt/redix-5.0.7/utils/install_sercer.sh ——————————执行脚本文件,修改并确认redis配置
将redix-server路径修改为/usr/local/redis/bin/redis-server
在这里插入图片描述

3.1.5 创建软链接并查看redis服务

ln -s /usr/local/redis/bin/redis-server /usr/local/bin ————————redis-server创建一个到/usr/local/bin下的软连接,使用户在任何目录下都可以改变redis服务状态
netstat -tulnap | grep redis ————————对redis进行监听
在这里插入图片描述

3.2 redis配置文件概述

redis配置文件位置 /etc/redis/6379.conf
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
每次修改配置文件一定要记得备份并且修改完之后要重启服务

/etc/init.d/redis_6379 start/stop/status/restart ——————更改redis服务状态

3.3 redis基本命令

redis-cli -h 监听的ip地址 -p redis的端口号 -a 密码
这里不输入-h与-p会进入本地
没有密码可以不写-a
在这里插入图片描述
set 键值名称 数据 ————————写入数据
在这里插入图片描述
get 键值名称 数据 ————————提取键值中的数据
keys * ——————————查看当前数据库中所有键值
在这里插入图片描述
keys y? ——————————查看y开头后面接一个任意数的所有键值
在这里插入图片描述
del 键值 ————————删除键值
在这里插入图片描述
type 键值名 ——————查看键值类型
在这里插入图片描述
rename 旧键值名 新键值名 ————————更改键值名
在这里插入图片描述
dbsize ———————— 查看当前数据库中键值个数
在这里插入图片描述
config set requirepass 密码 ————————创建或修改密码
config get requirepass —————————查看密码
在这里插入图片描述
redis默认有16个数据库分为为0-15号,刚进入redis中默认在0号数据库中。
select 数据库序号 ——————切换当前所在数据库
在这里插入图片描述
move 键值名称 数据库序号 ——————将当前数据库中的键值以及数据转移到指定的数据库中
在这里插入图片描述
flushdb ——————清空当前数据库
flushall ———————清空所有数据库

四、reids高可用

4.1 RDB

4.1.1 RDB特点

RDB特点:
1、文件小,保存时会以压缩形式进行保存
2、将数据以快照的形式进行存储(相当于存档点)
3、可能丢失数据

4.1.2 RDB持久化触发机制

RDB持久化主要通过生成新的RDB文件形式(覆盖原文件)

RDB的触发可以由手动触发与自动触发
(强制退出redis不会保存操作,不强制退出修改会被保存)

save命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在Redis服务器阻塞期间,服务器不能处理任何命令请求。
而bgsave命令会创建一个子进程,由子进程来负责创建RDB文件,父进程(即Redis主进程)则继续处理请求。
bgsave命令执行过程中,只有fork子进程时会阻塞服务器,而对于save命令,整个过程都会阻塞服务器,因此save已基本被废弃,线上环境要杜绝save的使用。

save 分钟 次数 ——————每几分钟生成一次RDB文件或数据发生几次变化就会生成一次RDB文件(生成形式为覆盖原文件)
例如save -300 -1 ——————每300秒(5分钟)或数据每发生一次变化就会以覆盖原文件的形式生成新的RDB文件
在这里插入图片描述
在这里插入图片描述

4.1.3 RDB流程

在这里插入图片描述
大致意思为:
1、父进程响应bgsave命令去进行生成新RDB文件
2、父进程首先会查询是否有子进程已经去干这件事了,如果有了,那么父进程将直接返回bgsave命令
3、如果没有,父进程会进行fork操作来创建一个子进程,在fork过程中(创建子进程过程中),父进程处于堵塞状态,不能响应其他命令
4、父进程完成fork操作之后,父进程不再堵塞,可以响应其他命令,子进程去生成新的RDB文件(以覆盖的形式)
5、子进程生成完RDB文件后,通知父进程RDB文件创建完毕
7、父进程接收到通知之后更新统计数据,最后返回bgsave命令

4.1.4 RDB快照机制实战

目的:在redis缓存数据库中删除所有键值与数据,通过bgsave快照,回到没有删除数据的时间点
第一步 开始持久化,输入bgsave生成rdb新文件
第二步 删除redis中的所有数据
在这里插入图片描述
第三步 备份RDB数据文件
cp /var/lib/redis/6379/dump.rdb /opt ———————备份RDB数据文件到opt目录下
(因为是exit退出属于强制退出,RDB数据文件此时是有数据的)
在这里插入图片描述
第四步 redis-cli shutdown ——————关闭redis服务
(属于手动退出,退出时会更新一次RDB文件)
在这里插入图片描述
第五步 覆盖原RDB数据文件
在这里插入图片描述
第六步 打开redis服务
在这里插入图片描述
第七步 查看数据库中是否有数据
在这里插入图片描述

4.2 AOF

AOF的持久化是实时监控并同步redis数据,在主从复制中,对主与从缓存数据库的数据同步起到很关键的作用,实时同步可以让这两者之间数据保持一致。

4.2.1 AOF持久化与RDB持久化的区别

RDB持久化
1、RDB持久化的会定时的去更新RDB文件
2、RDB保存文件小,磁盘占用空间小

AOF持久化
1、AOF持久化是实时的进行数据文件更新与同步
2、AOF将数据保存到新AOF过程中需要调用大量CPU资源,将数据存入磁盘中的AOF文件中
3、AOF文件大,磁盘占用空间大
4、AOF文件持久化速度快

4.2.2 AOF原理

在这里插入图片描述
大致意思为:
1、客户端修改redis文件或时间到达AOF持久化的一次新文件生成。
2、父进程先查看是否有子进程在执行,如果有则父进程直接返回命令。
3、若果没有,父进程进行fork操作创建一个子进程,此期间,父进程堵塞,不能响应其他命令。
4、fork进程之后,父进程可以响应其他命令,内存中的数据会以命令的方式存入缓冲区中,之后通过调用cpu将缓冲区内容写入旧AOF文件中。
5、子进程创建一个新AOF文件,父进程将缓冲区中的文件进行压缩与刚刚响应其他命令以及子进程创建AOF的过程的数据一起打包进重写缓冲区中。
6、子进程创建完新AOF文件后会通知父进程。
7、父进程收到通知后,通过调用CPU将重写缓存区中的数据放入磁盘中的新AOF文件。
8、最后将旧AOF文件中的数据替换为新AOF中的数据。

4.3 主从复制

一主多从,主写从读。
案例:微博数据 → 主库负责写入热搜,从库负责提供用户查询,分担压力。
主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。
(缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。)

4.3.1 主从复制作用

主从复制主要用于解决数据冗余问题,数据只单独存放在一个数据库中,容易丢失数据。
1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务
(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

4.3.2 主从复制原理

在这里插入图片描述
大致意思为:
1、主redis将自身原有的数据通过RDB持久化方式进行数据备份并发给从redis,使主从的数据一致,实现数据同步化。
2、后续客户端写入数据时,会先在主redis中写入数据,主缓存数据库会通过AOF的同步方式实时更新AOF数据文件并发给从Redis,最后实现主从数据同步。

4.3.3 主从复制实战操作

第一步 关闭防火墙与网络增强服务
systemctl stop firewalld ————————关闭防火墙
setenforce 0 ————————关闭网络增强服务
在这里插入图片描述
第二步
tar zxvf redis压缩包 -C /opt ————————解压redis压缩包至opt目录下
在这里插入图片描述
第三步 make && make prefix=/usr/local/redis install ——————编译安装
在这里插入图片描述
第四步 sh install。server ——————————执行脚本并更改配置
在这里插入图片描述
第五步 ln -s redis-server路径 /usr/local/bin/————————创建软链接到/usr/local/bin目录下
在这里插入图片描述
第六步 vim /etc/redis/redis.conf ———————编辑redis配置文件
slave配置(从)
vim /etc/redis/6379.conf
bind 0.0.0.0 ————————70行,修改监听地址为0.0.0.0
daemonize yes ————————137行,开启守护进程
logfile /var/log/redis_6379.log ————————172行,指定日志文件目录
dir /var/lib/redis/6379 —————264行,指定工作目录 replicaof 192.168.10.22 6379——————288行,指定要同步Master节点IP和端口
appendonly yes ————————700行,开启AOF持久化功能
在这里插入图片描述
master配置(主)
vim /etc/redis/6379.conf————————编辑redis配置文件
bind 0.0.0.0 ————————70行,修改监听地址为0.0.0.0
daemonize yes ————————137行,开启守护进程
logfile /var/log/redis_6379.log —————172行,指定日志文件目录
dir /var/lib/redis/6379 ————————264行,指定工作目录
appendonly yes —————————700行,开启AOF持久化功能
第七步 重启redis
/etc/init.d/redis_6379 restart ————————重启redis
在这里插入图片描述
第八步 redis-cli info replication ———————— 查看连接状态
在这里插入图片描述

4.4 哨兵

4.4.1 哨兵的概念与原理

主机宕机,自动切换到从机。
概念(实例):快递站点 A 停电,哨兵会自动切换到站点 B,业务不中断。在主从复制的基础上,哨兵实现了自动化的故障恢复。
缺陷:写操作无法负载均衡;存储能力受到单机的限制。
在这里插入图片描述
大致原理(一般的哨兵为3哨兵3服务节点):3个哨兵实时监控3个服务节点的存活情况(通过ping的方式),如果发现主服务节点故障会根据投票来客观判断主服务节点是否故障,如果投票过半则判定死亡,下一步将进行选举新的主节点,三个哨兵将会以内部算法进行投票选举新任master。

4.4.2 哨兵的部署环境配置

10.0.0.6 哨兵、master
10.0.0.7 哨兵、slave1
10.0.0.8 哨兵、slave2
关闭防火墙与网络增强服务
systemctl stop firewalld ————————关闭防火墙
setenforce 0 ————————关闭网络增强服务

4.4.3 哨兵部署操作

第一步 编辑哨兵配置文件
vim /opt/redis/sentinel.conf ——————————编辑哨兵配置文件

protected-mode no ————————————17行,关闭保护模式

port 26379 ————————21行,Redis哨兵默认的监听端口

daemonize yes ———————————26行,开启守护进程,指定sentinel为后台启动
logfile “/var/log/sentinel.log” ————————36行,指定日志存放路径

dir “/var/lib/redis/6379” ——————————65行,指定数据库存放路径

sentinel monitor mymaster 10.0.0.6 2 ————84行,指定master,并且指定切换master所需的最小票数

sentinel down-after-milliseconds mymaster 30000 ————————113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)

sentinel failover-timeout mymaster 180000 ——————146行,故障节点的最大超时时间为180000(180秒)
在这里插入图片描述
第二步 启动哨兵
cd /opt/redis/ ——————————切换至redis目录
redis-sentinel sentinel.conf & ——————————后台启动哨兵
在这里插入图片描述
在这里插入图片描述哨兵部署成功。

4.5 Cluster 集群

4.5.1 集群原理

多节点分片存储,解决单机内存限制。
案例:淘宝商品太多,单机放不下,按分类拆分到不同 Redis 节点。
通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。
在这里插入图片描述
大概原理为:客户发送命令给集群,会通过负载均衡的方式(默认轮询)将请求发给一个主master,如果是写的请求主master会直接处理,并将修改后的数据同步给自己的从节点,如果是读请求,主master节点可以直接处理也可以将请求发送给从节点,

4.6 redis集群部署

4.6.1 环境配置

master 10.0.0.6:6001
master 10.0.0.7:6001
master 10.0.0.8:6001
slaves 10.0.0.6:6002
slaves 10.0.0.7:6002
slaves 10.0.0.8:6002
关闭防火墙和网络增强服务

4.6.2 创建每个服务节点配置文件目录

由于机器数量限制,只能在3台虚拟机上部署3主3从,也就是每台虚拟机上部署一主一从,因此每台虚拟机得有两个配置文件,分别对应一主一从redis的配置。
mkdir -p /etc/redis/redis-cluster/{redis1,redis2} ——————创建两个redis目录,用于存放两个redis配置文件。
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis1
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis2
cp /opt/redis-5.0.7/src/redis-cli /etc/redis/redis-cluster/redis1
cp /opt/redis-5.0.7/src/redis-cli /etc/redis/redis-cluster/redis2
cp /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis2
cp /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis1
在这里插入图片描述

4.6.3 编辑各个节点redis的配置文件

vim /etc/redis/redis-cluster/{redis1,redis2}/redis.conf ————————编辑redis1和2的配置文件

#bind 127.0.0.1 ————————69行,注释掉bind 项,默认监听所有网卡
protected-mode no ————————————88行,修改,关闭保护模式
port 6001 ————————————92行,修改,redis监听端口,
daemonize yes ————————136行,开启守护进程,以独立进程启动
cluster-enabled yes ——————————832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf ————————840行,取消注释,群集名称文件设置
cluster-node-timeout 15000 ————————846行,取消注释群集超时时间设置
appendonly yes ——————————700行,修改,开启AOF持久化
在这里插入图片描述

4.6.4 启动redis节点

cd /etc/redis/redis-cluster/redis1 ——————切换到各个节点目录
redis-server redis.conf ————————启动redis节点
在这里插入图片描述

4.6.5 启动redis集群

redis-cli --cluster create 10.0.0.6:6001 10.0.0.7:6001 10.0.0.8:6001 10.0.0.6:6002 10.0.0.7:6002 10.0.0.8:6002 --cluster-replicas 1 ————————前三位为主节点,后三位从节点
在这里插入图片描述
redis-cli -p 6001 ——————————登录redis
cluster slots ——————————查看redis集群详情
在这里插入图片描述

总结

本文为总集,详细讲述了redis的概念与各个命令用法和环境配置等,希望本文能对您有所帮助,谢谢观看😜

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值