Redis学习 ——缓存

文章目录

  • 一、Redis缓存的介绍
  • 二、Redis缓存问题
    • 2.1 缓存穿透
    • 2.2 缓存击穿
    • 2.3 缓存雪崩
    • 2.4 双写一致性
    • 2.5 缓存持久化
      • RDB
      • AOF
  • 三、缓存数据管理
    • 3.1 数据过期策略
    • 3.2 数据淘汰策略

一、Redis缓存的介绍

我们在日常的代码编写中比较少使用到Redis,但是如果涉及到了比较大型的项目,常常避不开Redis这一项技术,那么在什么样的场景需要使用Redis呢。首先我们得明白Redis是一个高性能得键值数据库,我们使用它得原因很简单,就是因为快。这个问题在大并发,高负载的网站中必须考虑。redis数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此Redis的的的在性能上对比其他基于硬盘存储的数据库有非常明显的优势。并且除了性能方面的优势,Redis作为数据库的缓冲,可以很好的解决并发问题,避免了数据库因为过多的并发请求而崩溃。所以其实在项目较大,需要多次请求的场景下,我们都可以考虑使用Redis。本文是根据黑马教程学习中所编写的引用了黑马程序员视频中的课件图片。

二、Redis缓存问题

在Redis缓存正常运行的情况下,它的运行流程如:
在这里插入图片描述

2.1 缓存穿透

在缓存这正常流程中,我们可能会遇到缓存穿透问题,也就是我们去申请查询一个不存在的数据
那么由于我们无法在Redis中命中,我们就会直接到数据库去申请,那么每次查询不存在的数据都会直接向数据库发出请求,这就会对数据库造成很大的压力。
为了解决缓存穿透问题,常见的有几种方案:

  • 解决方案1:将空数据缓存,这种方式简单,但会消耗内存,并且有可能造成不一致的问题
  • 解决方案2:使用布隆过滤器。
    在这里插入图片描述
    那么布隆过滤器是如何实现帮助我们过滤的呢?
    布隆过滤器中有一个bitmap也就是以bit为单位的数组,每个单元的值只能为0或者1,然后我们需要明白布隆过滤器也是需要初始化的,也就是上图中缓存预热时,预热布隆过滤器。那么存储时,我们会对数据的主键进行多个hash函数计算,将计算出来的值对应的bitmap中的单元值改为1,查询数据判断主键经过多个hash函数计算后的单位位是否位1,如果是则数据库中含有该元素。
    但是需要明白的是由于有多个hash函数,一个主键如id1对应的可能是好几个bitmap单元位,必须全部为1的情况下才说明含有该元素。也有可能会出现误判的情况,如:
    在这里插入图片描述
    在这种情况下,bitmap数组越大,误判的概率就越低。

2.2 缓存击穿

缓存击穿问题其实是当某一个时刻key过期,并且在这个时刻发送过来了大量的并发请求,这些请求就有可能把DB击垮。
解决的方案有两种:互斥锁和逻辑过期
在这里插入图片描述
互斥锁解决方案具有强一致,性能差的特点
在这里插入图片描述
逻辑过期则是高可用,性能优,但是可能会出现线程1这样的返回旧数据的情况,可以根据是否需要保证数据的强一致性来选择解决方案。

2.3 缓存雪崩

缓存雪崩就是在一段时间内大量缓存key失效或者Redis宕机,导致大量请求抵达数据库造成压力。
在这里插入图片描述
给不同Key添加随机值不用说,Spring cloud gateway也就是网关,我们可以通过在后端的SSM配置中的网关来限流,nginx的限流配置也十分简单,这两个方案就不多讲了。其中限流策略实用性较高
重点需要讲的是Redis集群中的哨兵模式和集群模式:
Redis提供了哨兵(Sentinel)机制来实现主从集群的自动恢复,监测方式如下:
在这里插入图片描述
在知道了基本的监测方式后,Redis集群还可能出现脑裂问题:
在这里插入图片描述
当网络恢复后,该master就会变成后半部分集群的slave,会清空数据后与后半集群的master数据同步,那么刚刚写入的数据就丢失了,为了解决这个问题,我们需要设置,当你想要写入数据,master必须含有一个slave节点,这样就可以避免脑裂问题。

2.4 双写一致性

这个问题需要考虑的是自己的业务背景是一致性要求高还是允许延迟一致
在这里插入图片描述
其中强一致性中的两个锁的方式如下:
在这里插入图片描述

2.5 缓存持久化

在Redis中提供了两种持久化方式:1、RDB 2、AOF

RDB

RDB也就是Redis Database Backup file(Redis数据备份文件),也就是Redis数据快照,把内存中的所有数据记录到磁盘之中,当Redis实例故障重启之后,从磁盘读取快照文件,恢复数据。在这里插入图片描述
RDB的实现原理也就是基于页表实现内存的的读取,如果不明白什么是页表,可以参考我之前发的文章操作系统基础。

AOF

AOF全称也就是Append Only File(追加文件),AOF文件可以看做是命令日志文件。,我们可以学习一下AOF如何开启和配置:
在这里插入图片描述
Redis中的AOF还具有重写功能,具体的使用配置可以参照下图:
在这里插入图片描述
两者区别:
在这里插入图片描述

三、缓存数据管理

3.1 数据过期策略

在这里插入图片描述
而这种策略可以分为

  • 惰性删除:设置key过期时间过后,不去管它,如果当需要该key时再检查,若过期就删除,反之返回key。这种方式的优点是对CPU比较友好,不会浪费资源检查。
    缺点:对内存不友好,如果没使用就永远不会释放
  • 定期删除:每隔一段时间定期检查删除过期的key
    在这里插入图片描述

3.2 数据淘汰策略

数据淘汰的情况发生再当内存不够用时,我们需要决定淘汰那些数据来存放新数据,其中有几种不同的删除策略如下图:
在这里插入图片描述
在了解了数据淘汰策略之后,我们肯定就需要了解使用这些策略的场景。
在这里插入图片描述

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

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

相关文章

“乐鑫组件注册表”简介

当启动一个新的开发项目时,开发者们通常会利用库和驱动程序等现有的代码资源。这种做法不仅节省时间,还简化了项目的维护工作。本文将深入探讨乐鑫组件注册表的概念及其核心理念,旨在指导您高效地使用和贡献组件。 概念解析 ESP-IDF 的架构…

视觉SLAM--经典视觉SLAM框架

整个视觉SLAM流程主要包括以下步骤: 1、传感器信息读取:在视觉SLAM中主要为相机图像信息的读取和预处理。 2、前端视觉里程计:估算相邻图像间相机的运动,以及局部地图的样子。 3、后端(非线性)优化&#…

Ajax的相关内容

一、Ajax的使用步骤 1.创建XML对象 const xhrnew XMLHttpRequest(); 2.监听事件,处理响应 3.准备发送请求 true表示异步 ajax中永远是异步,永远是true 4.发送请求 二、GET和POST请求 三、JSON的三种形式 四、JSON的方法 五、跨域 六、XHR的属性和方法…

有限状态机(续)

一、添加刀光和场景 1、资源链接: 武器刀光:https://assetstore.unity.com/packages/tools/particles-effects/melee-weapon-trail-1728 场景:https://assetstore.unity.com/packages/3d/environments/fantasy/casual-tiny-environment-ju…

2024年11月16日 星期六 重新整理Go技术

今日格言 坚持每天进步一点点~ 一个人也可以是一个团队~ 学习全栈开发, 做自己喜欢的产品~~ 简介 大家好, 我是张大鹏, 今天是2024年11月16日星期六, 很高兴在这里给大家分享技术. 今天又是休息的一天, 做了很多的思考, 整理了自己掌握的技术, 比如Java, Python, Golang,…

【Linux】软件包管理器yum、编辑器vim

Linux 1.源码安装 和 软件包安装2.软件包管理器yum1.什么是包管理器 3.vim编辑器1.vim常见的三种模式2.vim命令模式:命令集3.vim底行模式:命令集4.使用vim的小技巧5.vim配置 1.源码安装 和 软件包安装 在Linux下安装软件,一个通常的办法是下…

高项 - 项目进度管理

个人总结,仅供参考,欢迎加好友一起讨论 博文更新参考时间点:2024-12 高项 - 章节与知识点汇总:点击跳转 文章目录 高项 - 项目进度管理进度管理ITO规划监控 管理基础项目进度计划的定义和总要求管理新实践用户故事(补…

【CSS】opacity 影响 z-index 不生效

准备知识 一般来说,z-index 不生效的原因有: 父元素的 position 属性: z-index 只对 position 属性为 relative、absolute 或 fixed 的元素有效。 其他元素的 z-index: 如果页面中有其他元素也设置了较高的 z-index,…

django安装与项目创建

一、安装 在终端输入 pip install django //或者()指定安装版本 pip install django2.2 二、创建项目 2.1创建项目 django-admin startproject 项目名 2.2Django 项目中的关键文件 _init_.py:将目录标识为python包setting.py:核心配置文件,定义项目…

Python学习28天

#冒泡排序,将如下列表从大到小排序 num[1,2,3,4,5] print(f"排序前:{num}")#第一次排序:将最小的排到最后一个位置: # 第1次比较 [2,1,3,4,5] # 第2次比较 [2,3,1,4,5] # 第3次比较 [2,3,4,1,5] # 第4次比较 [2,3,4,5,…

Shell脚本5 -- 脚本与用户交互read

声明: 本文的学习内容来源于B站up主“泷羽sec”视频【shell编程(4)脚本与用户交互以及if条件判断】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题&#xff0c…

【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法

【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法 目录 文章目录 【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法目录摘要:研究背景:问题与挑战:如何解…

vue实现展示并下载后端返回的图片流

// 点击下载 downLoadCode() {const image new Image();image.setAttribute("crossOrigin", "anonymous");image.onload () > {const canvas document.createElement("canvas");canvas.width image.width;canvas.height image.height;c…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04目录1. Alopex: A Computational Framework for Enabling On-Device Function Calls with LLMs摘要:研究背景&…

JavaScript逆向爬虫教程-------基础篇之JavaScript密码学以及CryptoJS各种常用算法的实现

目录 一、密码学介绍 1.1 为什么要学密码学?1.2 密码学里面学哪一些 二、字符编码三、位运算四、Hex 编码与 Base64 编码 4.1 Hex 编码4.2 Base64 编码 五、消息摘要算法 5.1 简介5.2 JS中的MD5、SHA、HMAC、SM3 六、对称加密算法 6.1 介绍6.2 加密模式和填充方式6.3 CryptoJ…

使用 OpenAI 进行数据探索性分析(EDA)

#探索性数据分析(Exploratory Data Analysis, 简称 EDA)是数据分析中不可或缺的环节,帮助分析师快速了解数据的分布、特征和潜在模式。传统的 EDA 通常需要手动编写代码或使用工具完成。现在,通过 OpenAI 的 GPT-4 模型&#xff0…

2、计算机网络七层封包和解包的过程

计算机网络osi七层模型 1、网络模型总体预览2、数据链路层4、传输层5.应用层 1、网络模型总体预览 图片均来源B站:网络安全收藏家,没有本人作图 2、数据链路层 案例描述:主机A发出一条信息,到路由器A,这里封装目标MAC…

使用 PyTorch-BigGraph 构建和部署大规模图嵌入的完整教程

当涉及到图数据时,复杂性是不可避免的。无论是社交网络中的庞大互联关系、像 Freebase 这样的知识图谱,还是推荐引擎中海量的数据量,处理如此规模的图数据都充满挑战。 尤其是当目标是生成能够准确捕捉这些关系本质的嵌入表示时,…

国标GB28181视频平台EasyCVR视频融合平台H.265/H.264转码业务流程

在当今数字化、网络化的视频监控领域,大中型项目对于视频监控管理平台的需求日益增长,特别是在跨区域、多设备、高并发的复杂环境中。EasyCVR视频监控汇聚管理平台正是为了满足这些需求而设计的,它不仅提供了全面的管理功能,还支持…

使用win32com将ppt(x)文件转换为pdf文件

本文来记录下如何使用win32com将ppt(x)文件转换为pdf文件 文章目录 win32com概述win32com优缺点代码实例本文小结 win32com概述 Pywin32 是一个用于与 Microsoft Windows 操作系统交互的 Python 扩展模块,它提供了对多个 Windows API 的访问,包括对 Mic…