文章目录
前言
本文为总集,详细讲述了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(不需要进行配置)

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的概念与各个命令用法和环境配置等,希望本文能对您有所帮助,谢谢观看😜
1345

被折叠的 条评论
为什么被折叠?



