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,实现数据备份

在这里插入图片描述

慢查询

在这里插入图片描述

在这里插入图片描述

内存配置

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI 智能对话 - 基于 ChatGLM2-6B 训练对话知识库

前情提要 怎么将 AI 应用到工作中呢?比如让 AI 帮忙写代码,自己通过工程上的思维将代码整合排版,我挺烦什么代码逻辑严谨性的问题,但是我又不得不承认这样的好处,我们要开始将角色转换出来,不应该是一个工…

Ceph部署

目录 1、存储基础 单机存储设备 单机存储的问题 分布式存储(软件定义的存储 SDS) 分布式存储的类型 2、Ceph 简介 3、Ceph 优势 4、Ceph 架构 5、Ceph 核心组件 Pool中数据保存方式支持两种类型: Pool、PG 和 OSD 的关系&#xff…

功能丰富的 Markdown 笔记工具:FSNotes Mac中文版图文安装教程

FSNotes Mac版是Mac平台上一款纯文本笔记本管理器,FSNotes for mac中文版支持Markdown、RTF等格式,轻松查看和编辑数据,还可以将数据存储在文件系统中,同时具备iCloud同步功能,使用非常便捷。 FSNotes for mac官方介绍…

自动化测试转型挑战及其解决方案

目录 前言: 自动化测试挑战 选择合适的自动化测试方法 选择正确的自动化工具 整理数据 何时开始和停止 如何克服挑战 前言: 自动化测试的转型是许多组织在提高测试效率和质量方面的重要举措。然而,这个转型过程中可能会面临一些挑战。…

Java 装箱拆箱原理 包装类型缓存池

JAVA中的基本数据类型 byteshortintlongfloatdoublebooleanchar 为了让上述基本数据类型可以转为对象,Java在1.5推出了一系列包装类,基本类和包装类互相转换的过程,称为装箱和拆箱 缓存池 缓存池也叫常量池。它是事先存储一些常量数据用以…

优化营商环境:构建智能营销平台,助力企业经营发展

对于企业来说,没有了客户,就像身体没有了血液,将失去生命力和活力,续存难发展更难。区域产业又是由一个个企业集聚而形成,企业的成败也就决定着区域产业的兴衰。 在当今竞争激烈的商业环境中,传统的销售手段…

MongoDB初体验-安装使用教程2023.7

前言:博主第一次接触MongoDB,看了一圈网上现有的教程,不是缺少细节就是有问题没交代清楚,特整理了一下自己安装运行的过程,从下载安装到开机自启,全程细节齐全、图文并茂、简单易懂。 目录 1. 从官网下载2…

基于遗传算法的新能源电动汽车充电桩与路径选择MATLAB程序

主要内容: 根据城市间的距离,规划新能源汽车的行驶路径。要求行驶距离最短。 部分代码: %% 加载数据 %%遗传参数 load zby;%个城市坐标位置 NIND50; %种群大小 MAXGEN200; Pc0.9; %交叉概率 Pm0.2; %变异概率 GGAP0.…

巩固一下NodeJs

1、初始化(确保当前电脑有node环境) npm init 2、安装express npm i expressnpm i ws文件结构 3、编写相关代码启动node服务(server.js) //导入下列模块,express搭建服务器,fs用来操作文件、ws用来实现webscoket const express require("expr…

C++进阶—C++11新特性(移动语义右值引用可变参数模板lambda表达式function包装器bind函数)

目录 0. C11简介 1. 统一的列表初始化 1.1 {}初始化 1.2 std::initializer_list 2. 声明 2.1 auto 2.2 decltype 2.3 nullptr 3. 范围for循环 4. 智能指针 5. STL中一些变化 6. 右值引用和移动语义 6.1 左值引用和右值引用 6.2 左值引用与右值引用比较 6.3 右值…

PSP - Jackhmmer 搜索 EMBL 序列数据库的相似序列

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131817060 EMBL (European Molecular Biology Laboratory,欧洲分子生物实验室):EMBL 数据库是一个由欧洲生物信息学研究所…

springboot与rabbitmq的整合【演示5种基本交换机】

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:后端专栏 📧如果文章知识点有错误的地方,…

【0】冒泡排序

前言 通过函数模板技术设计一个冒泡排序算法,领悟泛型编程的思想和冒泡排序的思想,然后使用QTest测试各种输入值,养成先写测试代码,后写程序代码的习惯 0x0 编写一个int版本的冒泡函数 1.不管要排序的数组长度多长,外…

CASAIM与大疆达成全自动化测量技术合作,CASAIM IS全自动化蓝光测量仪实现无人机叶片全尺寸检测及质量控制

近期,CASAIM与大疆达成全自动化测量技术合作,CASAIM IS全自动化蓝光测量仪实现无人机叶片全尺寸检测及质量控制。 无人机行业在过去几年里取得了迅猛发展,大疆是全球领先的无人飞行器控制系统及无人机解决方案的研发商和生产商,客…

Spring-AOP(面向切面)

Spring-AOP(面向切面) 场景模拟(计算器) 功能接口 public interface Calculator {int add(int i, int j);int minus(int i, int j);int multiply(int i, int j);int div(int i, int j); }实现类 public class CalculateLogImpl implements Calculator {Overridepublic int …

PALO ALTO NETWORKS 的新一代防火墙如何保护企业安全

轻松采用创新技术、阻止网络攻击得逞并专注更重要的工作 IT 的快速发展已改变网络边界的面貌。数据无处不在,用户可随时随地从各类设备访问这些数据。同时,IT 团队正在采用云、分析和自动化来加速新应用的交付以及推动业务发展。这些根本性的转变带来了…

【Linux】- 任务调度和定时任务

任务调度和定时任务 1 crond 任务调度2 at 定时任务 1 crond 任务调度 crontab 进行 定时任务的设置 任务调度:是指系统在某个时间执行的特定的命令或程序。 任务调度分类:1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等 个别…

ChatGPT 最佳实践指南之:系统地测试变化

Test changes systematically 系统地测试变化 Improving performance is easier if you can measure it. In some cases a modification to a prompt will achieve better performance on a few isolated examples but lead to worse overall performance on a more representa…

【Docker】Docker基本概念

Docker基本概念 1.Docker概述1.1 Docker是什么?1.2 Docker的宗旨1.3 容器的优点1.4 Docker与虚拟机的区别1.5 容器在内核中支持的两种技术1.6 namespace的六大类型 2.Docker核心概念2.1 镜像2.2 容器2.3 仓库 3. 知识点总结3.1 Docker是什么?3.2 容器和虚…

智能分析网关V2有抓拍告警但无法推送到EasyCVR,是什么原因?

我们在此前的文章中也介绍了关于智能分析网关V2接入EasyCVR平台的操作步骤,感兴趣的用户可以查看这篇文章:在EasyCVR新版本v3.3中,如何正确接入智能分析网关V2? 智能分析网关V2是基于边缘AI计算技术,可对前端摄像头采…