Redis入门(部署、持久化、缓存问题)

发布于:2025-09-09 ⋅ 阅读:(24) ⋅ 点赞:(0)

Redis部署

一、Redis部署

1、单机部署

特点:

最简单的部署方式,单节点运行。

适合开发、测试或小规模应用。

无高可用性,节点宕机则服务不可用。

教程:

在这里我们选择用虚拟机(Linux环境  centos 7)来实现部署redis

在官网中下载redis压缩包Redis下载

注意:浏览器可能识别文件不安全,选择保留文件

利用终端工具将压缩包上传到虚拟机并解压压缩包

tar -zvxf redis-5.0.4.tar.gz

结果如图:

注意的是redis是用C写的所以需要C的环境:

tar -zvxf redis-5.0.4.tar.gz

cd redis-5.0.4

编译redis

make && make install

如此编译成功:

2、主从部署

特点

  • 一主多从(Master-Slave),主节点负责写,从节点负责读(读写分离)。
  • 数据异步复制,从节点可提升读性能。
  • 主节点宕机时需手动切换(无自动故障转移)。

教程:

这里我们准备三台虚拟机:

Master 192.168.81.131

Slave1 192.168.81.132

Slave2 192.168.81.133

在第一台虚拟机部署好redis(单机模式)后,利用

scp -r redis root@192.168.81.132:/root/

scp -r redis root@192.168.81.133:/root/

复制到其他两台虚拟机,

修改slave1 和 slave2的配置:主机地址、端口和密码

保存并退出后,

在两台虚拟机中下载C环境:

yum install -y gcc tcl

编译redis:

make && make install

启动redis:

redis-server redis.conf

redis-cli -a 123456

在master中输入info replication,显示如下:

注意:该过程要在关闭防火墙的前提下操作!

此后三台虚拟机的数据会一样!

3、哨兵部署

Redis 哨兵(Sentinel)是 Redis 官方提供的 高可用性(HA)解决方案,用于监控主从节点、自动故障转移(Failover)和通知管理员。

特点

  • 高可用方案,哨兵(Sentinel)监控主从节点,自动故障转移(Failover)。
  • 至少需要 3 个 Sentinel 节点(避免脑裂问题)。
  • 客户端通过 Sentinel 获取最新的主节点地址

教程:

打开三台虚拟机的sentinel.conf文件,做以下配置:

protected-mode no     

6行,关闭保护模式

daemonize yes        

15行,指定sentinel为后台启动

logfile "/root/redis/redis-5.0.4/sentinel.log"   

34行,指定日志存放路径

dir /root/redis                 

73行,指定数据库存放路径

sentinel monitor mymaster 192.168.81.131 6379 2   

93行,修改指定该哨兵节点监控20.0.0.20:6379这个主节点,该主节点的

sentinel down-after-milliseconds mymaster 30000  

134行,判定服务器down掉的时间周期,默认30000毫秒(30秒)

sentinel failover-timeout mymaster 180000      

234行,故障节点的最大超时时间为180000(180秒)

sentinel auth-pass mymaster 123456

主机密码

sentinel annoince-ip 192.168.81.131

本机地址

sentinel announce-port 26379

本机端口

然后启动哨兵模式:

redis-sentinel sentinel.conf

注意:哨兵模式是基于主仆模式来启动的,必须保证其启动的状态,,

查看状态:

redis-cli -p 26379 info sentinel

如图:

二、redis缓存击穿、穿透与雪崩

1缓存穿透(Cache Penetration

问题描述

  • 现象:大量请求查询 不存在的数据,绕过缓存直接访问数据库。
  • 原因:恶意攻击或业务逻辑缺陷(如查询不存在的用户ID)。
  • 影响:数据库负载激增,可能被拖垮。

解决方案

方法

说明

缓存空对象

对查询结果为 null 的请求也缓存(设置短TTL,如 5 分钟)。

布隆过滤器

在缓存前加一层布隆过滤器,快速判断数据是否存在,拦截无效请求判断数据是否存在,拦截无效请求。

参数校验

对请求参数做合法性检查(如ID必须为数字)。

2缓存击穿(Cache Breakdown

问题描述

  • 现象:某个 热点Key突然失效,同时大量请求直接击穿缓存访问数据库。
  • 原因:高并发请求 + Key过期或手动删除。
  • 影响:数据库瞬时压力过大。

解决方案

方法

说明

永不过期

对极热点Key设置逻辑过期(后台异步更新),不设置TTL。

互斥锁

使用 Redis 的 SETNX 实现分布式锁,只允许一个请求重建缓存。

双缓存策略

设置主备缓存(主缓存过期后,备缓存短暂顶替,异步更新主缓存)。

3.、缓存雪崩(Cache Avalanche

问题描述

  • 现象大量Key同时失效 或 Redis集群宕机,导致所有请求涌向数据库。
  • 原因:缓存集中过期、Redis服务崩溃。
  • 影响:数据库压力过大,系统可能崩溃。

解决方案

方法

说明

过期时间随机化

对Key的TTL添加随机值(如基础30分钟 + 随机0-10分钟),避免同时过期。

多级缓存

结合本地缓存(Caffeine)和分布式缓存(Redis),降低Redis依赖。

集群高可用

使用 Redis 哨兵或集群模式,避免单点故障。

熔断降级

通过 Hystrix 等工具在数据库压力过大时返回默认值,保护后端。

三者的区别对比

问题类型

关键特征

触发条件

解决重点

穿透

查询不存在的数据

恶意攻击或无效参数

拦截非法请求

击穿

单个热点Key失效

高并发 + Key突然过期

避免并发重建缓存

雪崩

大量Key失效或Redis宕机

缓存集中过期/服务崩溃

分散过期时间 + 高可用

三、redis持久化


Redis 持久化是将内存中的数据保存到磁盘,确保服务重启后数据不丢失。Redis 提供 两种持久化机制RDB(快照)AOF(日志追加),各有优缺点,也可结合使用。

1. RDBRedis Database)(默认)

原理

  • 定时生成数据快照(二进制文件,默认 dump.rdb)。
  • 触发方式
    • 手动执行 SAVE(阻塞)或 BGSAVE(后台异步)。
    • 配置自动触发(如 save 900 1:900秒内至少1次修改则触发)。

优点

  • 高性能:二进制文件紧凑,恢复速度快。
  • 适合备份:单个文件便于迁移和灾难恢复。
  • 最小化磁盘写入:仅保存某一时刻的数据。

缺点

  • 可能丢失数据:两次快照之间的数据未持久化。
  • 大数据量时阻塞:BGSAVE 的子进程在保存时可能占用较多 CPU/内存。

配置示例

save 900 1       # 900秒内至少1次修改则触发

save 300 10      # 300秒内至少10次修改

save 60 10000    # 60秒内至少10000次修改
dbfilename dump.rdb

dir /var/lib/redis

记录会保存在dump.rdb文件里,防止断电丢失。

2. AOFAppend Only File

原理

  • 记录所有写操作命令(文本格式,默认 appendonly.aof)。
  • 写入策略
    • appendfsync always:每次写命令都同步到磁盘(最安全,性能最低)。
    • appendfsync everysec(默认):每秒同步一次(平衡性能与安全)。
    • appendfsync no:由操作系统决定(最快,但可能丢失数据)。

优点

  • 数据安全性高:最多丢失1秒数据(everysec 模式)。
  • 可读性强:AOF 文件是文本格式,便于人工分析或修复。

缺点

  • 文件体积大:长期运行后 AOF 文件可能膨胀(需定期 BGREWRITEAOF 重写)。
  • 恢复速度慢:需重新执行所有命令,比 RDB 慢。

配置示例

# 启用 AOF 持久化模式(默认是关闭的)

appendonly yes



# 定义 AOF 持久化文件的名称

appendfilename "appendonly.aof"



# 数据同步策略:

#   always - 每次写入都同步(最安全但性能最差)

#   everysec - 每秒同步一次(推荐配置,平衡性能与安全)

#   no - 由操作系统决定(最快但可能丢失数据)

appendfsync everysec



# AOF/RDB 文件存储目录

dir /var/lib/redis

修改redis,conf文件,appendonly yes

重启redis,进行操作redis后,可以看到出现了aof文件,

打开文件可以发现,记录了我们的所有操作:


网站公告

今日签到

点亮在社区的每一天
去签到