温故知新-Redis01

news2024/11/27 18:37:36

目录

开场白-追命3连

使用场景

01缓存穿透场景与方案

02布隆过滤器

03缓存击穿场景与方案

04缓存雪崩场景与方案



开场白-追命3连

  • 看你项目中有说用到Redis,都是哪些场景使用了Redis呢?

  • 如果发生了缓存穿透、击穿、雪崩如何应对呢?缓存中数据的持久化和双写一致怎么实现的呢?数据过期和淘汰策略了解么?

  • 能说说Redis实现分布式锁的方案和原理么?

使用场景

01缓存穿透场景与方案

使用缓存是一种常见的性能优化和数据管理策略,它可以带来许多好处:

  1. 提高性能:缓存允许将常用或重复访问的数据存储在快速访问的位置,通常是内存中。这可以大大减少从慢速数据存储系统(如数据库)中读取数据的次数,从而显著提高应用程序的响应时间和性能。

  2. 减少资源消耗:读取和计算数据通常需要消耗计算资源和网络带宽。通过将结果缓存,可以减少这些资源的消耗,提高系统的效率。

  3. 降低数据库负载:数据库是许多应用程序的关键数据存储,频繁的数据库查询可以增加数据库的负载。通过缓存常用查询结果,可以减轻数据库的压力,提高数据库的可伸缩性。

  4. 减少网络延迟:从远程数据源(如云存储或远程API)获取数据通常需要较长的网络延迟。通过使用缓存,可以将数据放置在更接近应用程序的位置,从而降低网络延迟。

  5. 提高可伸缩性:使用缓存可以降低后端数据存储的压力,从而使应用程序更容易扩展,支持更多的用户和请求。

  6. 应对高并发:在高并发的情况下,数据库或其他数据源可能无法及时响应请求。缓存可以缓解这种情况,因为它可以快速提供响应,而不必等待慢速数据源的响应。

  7. 提高用户体验:快速加载和响应时间可以显著提高用户体验,减少等待时间,增加用户满意度。

  8. 实现断点恢复:在某些应用中,缓存可以用于存储临时状态或进度,以支持断点续传或恢复操作,如文件上传或长时间运行的任务。

  9. 保护后端资源:通过缓存来限制对某些资源的访问,可以防止滥用或意外的流量对后端资源的过度消耗。

  10. 离线访问:缓存可以支持离线访问,使应用程序在没有连接到主要数据源时仍能够提供基本功能。

缓存穿透是一种缓存相关的性能问题,指的是恶意请求,通过访问缓存中不存在的数据,大量频繁地请求数据库连接,消耗资源。缓存穿透的明显特征:恶意大量大规模地请求不存在的数据

解决方案1:针对不存在的数据,使用null存入缓存。

  • 优点:方案方便简单

  • 缺点:会消耗大量的内存,有可能引起数据不一致的问题(缓存null的同时插入了真实值,数据就不一致了)

解决方案2:使用布隆过滤器拦截

  • 优点:内存占用少,没有多余key

  • 缺点:设计方案稍微复杂,存在误判

02布隆过滤器

布隆过滤器是一种用于快速检测某个元素是否存在于集合中的数据结构。在缓存层之前使用布隆过滤器,可以快速拦截那些明显不存在于数据源中的请求。在系统启动或数据更新后,就可以预热缓存,将热门数据加载到缓存中。

布隆过滤器实质上是一种位图(bitmap):相当于是一个以(bit)位为单位的数组,数组中每个单元只能存储二进制数0或者1。

  • 存储数据:通过多个hash函数获取hash值,根据hash计算数组对应位置改为1

  • 查询数据:使用相同hash函数获取hash值,判断对应位置是否都为1

误判:当查询并不存在的“武侯区”时,会返回错误的判断结果。

误判率:数组越小误判率越高,数组越大误判率越低,但越大的数组就带来了越多的内存消耗。(使用布隆过滤器的情况下默认允许误判率小于等于5%)

03缓存击穿场景与方案

缓存击穿是指:当一个缓存key设置了过期时间,而在过期的那一瞬间有大量并发请求同时访问这个key,导致请求穿透缓存直接访问数据库,而这个瞬间是有可能把数据库压垮的。

缓存没有命中查询数据库之后不是会写入缓存么?——缓存击穿的瞬间就是发生在这个写入的间隔时间内,哪怕只是10ms

解决方案1:互斥锁,在缓存中设置一个互斥锁,用于保护数据的加载过程,同时避免多个请求并发操作数据。

  • 优点:强一致性

  • 缺点:互斥锁导致资源消耗,性能差

解决方案2:逻辑过期,设置热门数据的缓存永不过期,或者设置一个很长的过期时间,以确保数据不会频繁失效。

  • 优点:高可用性,性能好

  • 缺点:不能保证保证数据绝对一直

04缓存雪崩场景与方案

缓存雪崩是指在某个时间点,缓存中的大量数据同时失效或过期,导致大量请求直接访问后端数据源,对后端系统造成巨大压力的情况。缓存雪崩通常发生在以下场景:

  1. 大规模数据同时过期:在某个时间点,大量缓存数据的过期时间到达,导致这些数据在短时间内同时失效。

  2. 系统重启:当系统重新启动或缓存服务重启时,所有缓存数据都会失效,导致大量请求访问后端数据源。

  3. 热门数据失效:缓存中的热门数据在某个时间点过期,因此大量请求同时访问这些数据。

解决方案1:针对过期时间->通过随机设置缓存数据的过期时间,避免大量数据同时过期。

解决方案2:针对Redis宕机->采用集群的方式部署Redis服务。

解决方案3:针对热门数据失效->在系统启动或低峰期,对热门数据进行预加载到缓存中,以降低高峰时段缓存失效的风险。

解决方案4:使用多级缓存方案,本地缓存+分布式缓存。

解决方案5:兜底策略->限流降级或者熔断,在高峰期对请求进行限流,确保不会过多请求直接访问后端。

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

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

相关文章

LangChain+LLM实战---ChatGPT的即时插件套件制作

英文原文:Instant Plugins for ChatGPT: Introducing the Wolfram ChatGPT Plugin Kit 在一分钟内构建一个新插件 几周前,我们与OpenAI合作发布了Wolfram插件,使ChatGPT可以使用Wolfram语言和Wolfram|Alpha作为工具,在ChatGPT内部…

Day 6 登录页以及路由(四)Vue页面处理

系列文章目录 本系列记录一下通过Abp搭建后端,VueElement UI Plus搭建前端,实现一个小型项目的过程。 Day 1 Vue 页面框架Day 2 Abp框架下,MySQL数据迁移时,添加表和字段注释Day 3 登录页以及路由 (一)Day 4 登录页及…

我终于学会的前端技能——代码调试、打断点

在技术的世界里,要用魔法来打败魔法 说来惭愧我做前端已近三年了竟然还没有学会如何调试代码,也就是给自己的代码打上断点一步步看它的运行状态以达到理清代码运行逻辑、排查问题提升开发效率的目的。直到最近我才学会了这一技能,在这之前我用…

抖音小店参与双十一活动:销售增长的策略与实施

双十一是中国最大的购物狂欢节,对于抖音小店商家来说,参与双十一活动是一个极好的机会,可以在这个繁忙的购物季节中大幅提升销售。下面四川不若与众将介绍一些抖音小店商家如何参与双十一活动的策略和注意事项。 1. 提前准备:在双…

Nginx编译安装和配置

官网:http://nginx.org/ 这里以1.20.2为例 Nginx是C语言写的 如果Linux系统上没有安装C编译环境 先执行下面命令 yum install -y gcc automake autoconf libtool make 如果不确定 可以使用命令查看 命令格式 rpm -q xxx 例如 说明有C编译环境 安装前需要安装4个依赖包…

任正非说:为更好地服务客户,我们把指挥所建到听得到炮声的地方

你好!这是华研荟【任正非说】系列的第29篇文章,让我们聆听任正非先生的真知灼见,学习华为的管理思想和管理理念。 一、产品发展的路标是客户需求导向,企业管理的目标是流程化的组织建设,这两句话归纳了我形容的龙的组织…

海康Visionmaster-全局变量:全局变量关联流程中具体 模块结果的方法

将视觉流程中模板匹配算法模块运行的结果数据:特征匹配点 X 关联全局变量 MatchResultX。 在流程运行的主界面中,按照下面 1,2,3,4 步骤操作,第一步选中算法模块,第二步择模块结果 Tab 页&#…

【NeurIPS 2020】基于蒙特卡罗树搜索的黑箱优化学习搜索空间划分

Learning Search Space Partition for Black-box Optimization using Monte Carlo Tree Search 目标:从采样(Dt ∩ ΩA)中学习一个边界,从而最大化两方的差异 先使用Kmeans在特征向量上( [x, f(x)] )聚类…

Python算法例4 求平方根

1. 问题描述 实现int sqrt(int x)函数,计算并返回x的平方根。 2. 问题示例 sqrt(3)1;sqrt(4)2;sqrt(5)2;sqrt(17&#…

GEE数据集——原住民土地(原住民土地地图)数据集

原住民土地(原住民土地地图) 土地承认是人们在日常生活中融入原住民存在和土地权利意识的一种方式。这通常在仪式、讲座或教育指南开始时进行。它可以是一种明确但有限的方式来认识殖民主义和第一民族的历史以及定居者殖民社会变革的需要。在这种情况下…

夜间灯光数据VIIRS Nighttime Day: Night Band Composites Version 1数据集

简介: 新一代对地观测卫星Suomi NPP,搭载的可见光红外成像辐射仪(Visible Infrared Imaging Radiometer Suit,VIIRS),能够获取新的夜间灯光遥感影像(Day/Night Band,DNB波段)。VIIRS_VCMCFG夜光遥感数据的…

航模模拟器训练

准备物品 航模遥控器 aux线 即两端都是耳机插头的线 解密狗 电脑 phoenixRC 航模模拟软件(【飞舜极创】凤凰5.0飞行模拟器 安装和设置方法_哔哩哔哩_bilibili) 操控 美国手(俗称左手油门)——左手油门和方向舵,右手升降和副翼 美国手 左摇杆: 上下…

【qemu逃逸】HITB2017-babyqemu 2019数字经济-qemu

前言 由于本地环境问题,babyqemu 环境都没有起起,这里仅仅做记录,exp 可能不正确。 HITB2017-babyqemu 设备逆向 设备定位啥的就不说了,先看下实例结构体: 其中 dma_state 结构体如下: 这里看字段猜测…

【算法|二分查找No.3】leetcode 35. 搜索插入位置

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

网络运维Day01

文章目录 环境准备OSI七层参考模型什么是协议?协议数据单元(PDU)设备与层的对应关系什么是IP地址?IP地址分类IP的网络位和主机位IP地址默认网络位与主机位子网掩码默认子网掩码查看IP地址安装CISCO汉化CISCO(可选操作) CISCO之PC机器验证通信 CISCSO之交…

台球厅桌球室计时计算软件计费方法,台球厅的电脑怎么计时

台球厅桌球室计时计算软件计费方法,台球厅的电脑怎么计时 今天给大家分享的是 佳易王桌球计时计费软件V18.0版本,只需点开始计时即可,结账的时候,软件自动计算金额。 灯控为可选,点开始计时,相应的桌灯亮…

【算法|二分查找No.4】leetcode 852. 山脉数组的峰顶索引

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

一文带你掌握多继承,菱形继承以及虚拟继承

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻强烈推荐优质专栏: 🍔🍟🌯C的世界(持续更新中) 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔…

第二十三章 LaneAF框架结构以及接入MMDetection3D模型(车道线感知)

一 前言 近期参与到了手写AI的车道线检测的学习中去,以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新,力求完整精炼,引人启示。所需前期知识,可以结合手写AI进行系统的学习。 二 LaneAF接入openlane数据集 2.1 Lan…

Box2d 物理画线,Cocos Creator 3.8

一个简易的画线刚体Demo 效果 抱歉,放错图了,以上是 孙二喵 iwae https://forum.cocos.org/t/topic/142673[1] 的效果图。本Demo是根据文章的思路,合成的代码。首先,感谢孙二喵的技术分享。 以下是最终效果图 使用 版本 Cocos Cre…