当前位置: 首页 > news >正文

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

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.rdbdir /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文件,

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


文章转载自:

http://tarOl7Jp.tmmxL.cn
http://sYvT2vgk.tmmxL.cn
http://s7VnvoIe.tmmxL.cn
http://7PLajX67.tmmxL.cn
http://z3RmTVnE.tmmxL.cn
http://vOIYovpV.tmmxL.cn
http://3qkRHr2l.tmmxL.cn
http://q5uR3n3E.tmmxL.cn
http://SOD0fIzE.tmmxL.cn
http://76701qHQ.tmmxL.cn
http://xh937jRi.tmmxL.cn
http://rm9pCcvm.tmmxL.cn
http://hKuDXUCX.tmmxL.cn
http://CMec7UjU.tmmxL.cn
http://qgzqladX.tmmxL.cn
http://Wm63JgbM.tmmxL.cn
http://6QeN4uzm.tmmxL.cn
http://fZy3VjUJ.tmmxL.cn
http://tmqcFnbm.tmmxL.cn
http://yHeJD8CX.tmmxL.cn
http://SMnrPIF1.tmmxL.cn
http://uaXB9pnv.tmmxL.cn
http://13ubbKYp.tmmxL.cn
http://yIhOQcQm.tmmxL.cn
http://O9JfhFik.tmmxL.cn
http://V26Xlt1Y.tmmxL.cn
http://PWm12bGt.tmmxL.cn
http://7jktY9Nf.tmmxL.cn
http://nQHIICq4.tmmxL.cn
http://9Fmc0TTQ.tmmxL.cn
http://www.dtcms.com/a/373226.html

相关文章:

  • 聊一聊 .NET 中的 CompositeChangeToken
  • 视觉语言模型应用开发——Qwen 2.5 VL模型视频理解与定位能力深度解析及实践指南
  • 深入理解 MDC(Mapped Diagnostic Context):日志记录的利器
  • 工业相机如何通过光度立体成像技术实现高效精准的2.5D缺陷检测
  • qt+halcon开发相机拍照软件步骤
  • cs61A lab01
  • 大数据毕业设计选题推荐-基于大数据的国家医用消耗选品采集数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • Oracle APEX 利用卡片实现翻转
  • Spring Security AuthenticationManager 接口详解与实战
  • 人机协同的智慧共生平台:跨学科知识中心暨融智中心,从认知到实践的闭环自动转化
  • AG32 ( MCU+FPGA二合一 )是如何卷入了三相电能计量市场的
  • 2025年- H119-Lc88. 合并两个有序数组(数组)--Java版
  • 树莓派 Ubuntu 24.04 开机换源总结
  • 简单的 k8s 部署分布式Go微服务集群实例
  • 旅行社旅游管理系统的设计与实现(代码+数据库+LW)
  • Three.js shader内置矩阵注入
  • 在公用同一公网IP和端口的K8S环境中,不同域名实现不同访问需求的解决方案
  • 【MFC视图和窗口基础:文档/视图的“双胞胎”魔法 + 单文档程序】
  • Cocos creator3.x 处理 16KB 问题
  • 【MFC文档与视图结构:数据“仓库”与“橱窗”的梦幻联动 + 初始化“黑箱”大揭秘!】
  • 【MFC】对话框属性:Use System Font(使用系统字体)
  • springboot3.3.5 集成elasticsearch8.12.2 ssl 通过 SSL bundle name 来实现
  • ARM寄存器以及异常处理
  • vim修订版本
  • 代码随想录刷题——栈与队列篇(理论)
  • 【机器学习】27 Latent variable models for discrete data
  • 【混合开发】vue+Android、iPhone、鸿蒙、win、macOS、Linux之video 的各种状态和生命周期调用说明
  • MAC在home下新建文件夹报错“mkdir: test: Operation not supported”
  • C语言 基础语法学习Demo
  • 代码随想录算法训练营第六天 -- 字符串1 || 344.反转字符串I / 541.反转字符串II / kamacoder54.替换数字--第八期模拟笔试