Redis学习(三)持久化机制、分布式缓存、多级缓存、Redis实战经验

文章目录

  • 分布式缓存
    • Redis持久化
      • RDB持久化
      • AOF持久化
    • Redis主从
      • Redis数据同步原理
        • 全量同步
        • 增量同步
    • Redis哨兵
      • 哨兵的作用和原理
        • sentinel(哨兵)的三个作用是什么?
        • sentinel如何判断一个Redis实例是否健康?
        • master出现故障后,新的master选择过程是怎样的?
        • 故障转移的步骤有哪些?
      • 项目中配置RedisTemplate哨兵模式
    • Redis分片集群
      • Redis散列插槽
      • Redis集群伸缩
      • 项目中RedisTemplate配置访问分片集群
  • Redis多级缓存
    • JVM进程缓存
      • Caffeine
        • Caffeine实现本地进程缓存案例
  • Redis实战经验
    • Redis键值设计
      • 优雅的key结构
      • 解决BigKey
      • 选择恰当的数据类型
    • 批处理优化
      • pipeline
      • 集群下的批处理
    • 服务端优化
      • 持久化配置
      • 慢查询
      • 内存配置

分布式缓存

单节点Redis存在着:

  • 数据丢失问题:单节点宕机,数据就丢失了。
  • 并发能力和存储能力问题:单节点能够满足的并发量、能够存储的数据量有限。
  • 故障恢复问题:如果Redis宕机,服务不可用,需要一种自动的故障恢复手段。

在这里插入图片描述

Redis持久化

RDB持久化

RDB(Redis database backup file,Redis数据库备份文件)

在这里插入图片描述
在这里插入图片描述
bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据,完成fork后,读取内存数据并写入RDB文件。fork采用的是copy-on-write技术:

  • 当主进程执行读操作时,访问共享内存
  • 当主进程执行写操作时,则会拷贝一份数据,执行写操作。

在这里插入图片描述
在这里插入图片描述

AOF持久化

AOF全称为Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Redis主从

在这里插入图片描述

在这里插入图片描述

Redis数据同步原理

全量同步

主从节点间的第一次同步采用的是全量同步,全量同步的流程如下:

  • slave节点请求增量同步
  • master节点判断replid,如果发现id不一致拒绝增量同步,id不一致说明是第一次同步,master会返回master的数据版本信息,尝试建立全量同步。
  • slave收到后,保存版本信息。
  • master节点执行bgsave,生成RDB,生成RDB期间的所有命令会保存在repl-backlog中,随后向slave发送RDB文件。
  • slave收到RDB文件后,清空本地数据,加载master节点发来的RDB文件。
  • 后序master节点会发送repl-baklog文件,slave收到后执行其中的命令,保持与master的数据同步。

在这里插入图片描述

增量同步

主从第一次同步是全量同步,但如果slave重启后同步,则执行增量同步
在这里插入图片描述
在这里插入图片描述

Redis哨兵

哨兵的作用和原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sentinel(哨兵)的三个作用是什么?

  • 监控
  • 故障转移
  • 通知

sentinel如何判断一个Redis实例是否健康?

  • 每隔1秒发送一次ping命令,如果超过一定时间没响应,认为是主观下线
  • 如果超过一半的sentinel都认为实例主观下线,则判断服务客观下线。

master出现故障后,新的master选择过程是怎样的?

在这里插入图片描述

故障转移的步骤有哪些?

  • 首先选定一个slave作为新的master,执行slaveof no one
  • 然后让所有的节点都执行slaveof 新的master
  • 修改故障节点配置,添加slaveof 新的master

项目中配置RedisTemplate哨兵模式

步骤:

在这里插入图片描述

在这里插入图片描述

Redis分片集群

主从和哨兵可以解决高可用、高并发持续的问题,但是依然有两个问题没有解决:

  • 海量数据存储问题
  • 高并发读写的问题

在这里插入图片描述
分片集群中有多个master,每个master都可以有多个slave节点,master间通过ping监测彼此健康状态,此时就不再需要哨兵机制了。

Redis散列插槽

Redis会把一个master的节点映射到 0 - 16383个插槽上,数据的key不是与节点绑定,而是与插槽绑定。

Redis如何判断某个key应该在哪个实例?

  • 将16384个插槽分配到不同的实例。
  • 根据key的有效部分计算哈希值,对16384取余。
  • 余数作为插槽,寻找插槽所在的实例即可。

如何将同一类数据固定的保存在同一个Redis实例?

  • 这一类数据使用相同的有效部分,例如key都以{typeid}为前缀。

在这里插入图片描述

Redis集群伸缩

集群伸缩的概念就是动态添加和移除节点
在这里插入图片描述

项目中RedisTemplate配置访问分片集群

在这里插入图片描述

Redis多级缓存

多级缓存就是充分利用请求处理的各个环节,分别添加缓存,减轻Tomcat压力,提升服务性能。

  • 浏览器、客户端缓存
  • Nginx本地缓存
  • Redis缓存
  • Tomcat进程缓存

在这里插入图片描述
在这里插入图片描述

JVM进程缓存

在这里插入图片描述

Caffeine

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Caffeine实现本地进程缓存案例

在这里插入图片描述
第一步:
构建缓存配置类,创建2个缓存的Bean对象:
在这里插入图片描述
第二步:
在使用的地方,将缓存对象注入,编写缓存查询和缓存未命中业务逻辑。

在这里插入图片描述

Redis实战经验

Redis键值设计

优雅的key结构

在这里插入图片描述

解决BigKey

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择恰当的数据类型

将大型的哈希表,进行拆表,拆解为小型的哈希表:
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

批处理优化

通过批处理执行,减少网络传输耗时。
在这里插入图片描述

在这里插入图片描述

pipeline

在这里插入图片描述
在这里插入图片描述

集群下的批处理

在这里插入图片描述
spring的Redistemplate已经提供了并行slot的集群下的批处理实现。
在这里插入图片描述

服务端优化

持久化配置

Redis持久化虽然可以保证数据安全,但也会带来很多额外的开销,因此持久化请遵循下列建议:

  • 用来做缓存的Redis实例尽量不要开启持久化,因为做缓存的数据只是为了加快响应速度,重要性没那么高。但是对于用来做分布式锁的数据,必须开启持久化,保证数据安全。
  • 建议关闭RDB持久化功能,使用AOF持久化。RDB持久化虽然文件占用更小,恢复更快,但是RDB在fork进程,生成RDB文件过程中,可能导致数据丢失。
  • 利用脚本定期在slave节点做RDB,实现数据备份

在这里插入图片描述

慢查询

在这里插入图片描述

在这里插入图片描述

内存配置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/39999.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows下PyTorch深度学习环境配置(GPU)

一:下载Anaconda (路径最好全英文) (下载好后,可以创建其他虚拟环境,因为是自己学习,所以先不放步骤,有需要者可以参考B站up我是土堆的视频) 二:利用 conda…

本地生活直播,和电商直播有什么不一样?

直播正在成为零售业的标配,当下最新的一条赛道是“本地生活直播”。 (商家开始在美团等平台进行本地生活直播。摄影:李崧稷) 今年618,在老牌电商平台拉着无数网店,拼尽全力想要堆高销量的时候,一…

《TCP IP网络编程》第六章

《TCP IP网络编程》第六章:基于 UDP 的服务端/客户端 UDP 套接字的特点: 通过寄信来说明 UDP 的工作原理,这是讲解 UDP 时使用的传统示例,它与 UDP 的特点完全相同。寄信前应先在信封上填好寄信人和收信人的地址,之后…

pytorch+CRNN实现

最近接触了一个仪表盘识别的项目,简单调研以后发现可以用CRNN来做。但是手边缺少仪表盘数据集,就先用ICDAR2013试了一下。 结果遇到了一系列坑。为了不使读者和自己在以后的日子继续遭罪。我把正确的代码发到下面了。 1)超参数请不要调整&am…

抖音新号起号正确方法,如何操作?

抖音上有着越来越多的卖家注册账号,但刚开始在注册账号后,新号是没有什么流量的,所以想要获得更多的流量的话,在刚开始进行起号的时候就需要按照以下方式进行,下面就一起了解清楚。 第一个找对标内容,抖音…

04 QT坐标系

在QT中默认左上角为原点,即(0,0)点。x轴右侧为正方向,y轴以下侧为正方向

解锁编程世界的魔法密码:探索算法的奥秘与应用

一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。今天就来聊聊这些十分重要的“必抓!”算法吧~* 一:引言 算法是解决问题和优化程序性能的核心,它是一…

Notepad++ 配置python虚拟环境(Anaconda)

Notepad配置python运行环境步骤: 打开Notepad ->”运行”菜单->”运行”按钮在弹出的窗口内输入以下命令: 我的conda中存在虚拟环境 (1) base (2) pytorch_gpu 添加base环境至Notepad中 cmd /k chdir /d $(CURRENT_DIRECTORY) & call cond…

LCD—STM32液晶显示(2.使用FSMC模拟8080时序)

目录 使用STM32的FSMC模拟8080接口时序 FSMC简介 FSMC NOR/PSRAM中的模式B时序图 用FSMC模拟8080时序 重点:HADDR内部地址与FSMC地址信号线的转换(实现地址对齐) 使用STM32的FSMC模拟8080接口时序 ILI9341的8080通讯接口时序可以由STM32使…

Java项目查询统计表中各状态数量

框架:SpringBoot,Mybatis;数据库:MySQL 表中设计2个状态字段,每个字段有3种状态,统计这6个状态各自的数量 sql查询语句及结果如图 SQL: SELECT SUM(CASE WHEN A0 THEN 1 ELSE 0 END) AS A0…

准备WebUI自动化测试面试?这30个问题你必须掌握(一)

本文共有8600字,包含了前十五个问题,如需要后十五个问题,可查看文末链接~ 1. 什么是WebUI自动化测试? WebUI自动化测试是指使用自动化测试工具和技术来模拟用户在Web用户界面(UI)上执行操作,并…

(转载)BP神经网络的非线性系统建模(matlab实现)

本博客的完整代码获取: https://www.mathworks.com/academia/books/book106283.html 1案例背景 在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法准确建模。在这种情况下,可以建立BP神经网络表达这些非线性系统。方法把未知系统看…

深度学习环境安装|PyCharm,Anaconda,PyTorch,CUDA,cuDNN等

本文参考了许多优秀博主的博客,大部分安装步骤可在其他博客中找到,鉴于我本人第一次安装后,时隔半年,我忘记了当时安装的许多细节和版本信息,所以再一次报错时,重装花费了大量时间。因此,我觉得…

【JAVA】方法的使用:方法语法、方法调用、方法重载、递归练习

🍉内容专栏:【JAVA从0到入门】 🍉本文脉络:JAVA方法的使用,递归练习 🍉本文作者:Melon_西西 🍉发布时间 :2023.7.19 目录 1. 什么是方法(method) 2 方法定义 2.1 方法…

自洽性改善语言模型中的思维链推理7.13、7.14

自洽性改善语言模型中的思维链推理 摘要介绍对多样化路径的自洽实验实验设置主要结果当CoT影响效率时候,SC会有所帮助与现有方法进行比较附加研究 相关工作总结 原文: 摘要 本篇论文提出了一种新的编码策略——自洽性,来替换思维链中使用的…

echarts x轴文字过长 文字换行显示

xAxis: {type: "category",data: [四美休闲娱乐文化场馆, 资讯, 大咖分享],axisLabel: {show: true,fontSize: 10,interval: 0,color: "#CAE8EA",formatter: function (params) {var newParamsName "";var paramsNameNumber params.length;var…

论文笔记--OpenPrompt: An Open-source Framework for Prompt-learning

论文笔记--OpenPrompt: An Open-source Framework for Prompt-learning 1. 文章简介2. 文章概括3 文章重点技术4. 文章亮点5. 原文传送门 1. 文章简介 标题:OpenPrompt: An Open-source Framework for Prompt-learning作者:Ning Ding, Shengding Hu, We…

与国外客户会面后,一些用语整理

与客户进行了会面,当客户离开工厂,我们需要对讨论过的内容进行整理并发邮件给客户,这里会用到一些客套语,今天分享部分给大家参考! Well received and thank you for the update, will be sure to take note on those…

SpringCloud学习路线(7)—— 统一网关Gateway

一、引言 (一)需求: 服务器中的微服务只允许内部人员调用或是内网人员进行调用,拒绝外网人员访问。 (二)如何实现需求? 网关 (三)网关的功能 身份认证和权限校验服务…

性能测试需求分析怎么做?(中)

本系列文章我们为大家系统地介绍一下性能测试需求分析,让大家全面掌握性能测试的第一个环节。本系列文章将会从性能测试需求分析整体概述、性能测试需求分析内容、性能测试需求分析方法这三个方面进行展开。在(上)部分中,我们为大…