Redis入门学习笔记【二】Redis缓存

news2024/11/15 15:48:25

目录

一、Redis缓存

二、Redis使用缓存遇到的问题

2.1 数据一致性

2.2缓存雪崩

2.3 缓存穿透

2.4 缓存击穿


一、Redis缓存

数据缓存是Redis最重要的一个场景,为缓存而生,在springboot中,一般有两种使用方式:

  • 直接通过RedisTemplate使用

  • 通过Spring Cache集成Redis(也就是注解的方式)

二、Redis使用缓存遇到的问题

2.1 数据一致性

在分布式环境下,缓存和数据库很容易出现数据一致性问题,如果项目对缓存的要求是强一致性,那就不要使用缓存。

我们只能在项目中使用策略降低缓存与数据库一致性的概率,是无法保障两者的强一致性,一般策略包括缓存更新机制,更新数据库后及时更新缓存、缓存失败时增加重试机制

2.2缓存雪崩

在了解雪崩溃之前,我们先了解什么是缓存雪崩现象,假设A系统每秒需要处理5000个请求,但数据库每秒只能处理4000个请求,某一天,缓存机器出现了宕机,挂了,这时候所有的请求一下子全部落在数据库上,数据库肯定扛不住,报警挂掉了,这时候如果没有采取缓存设施,数据库又急着用,重新重启数据库,刚重启完成(有可能没启动完),请求又来,数据库立马挂掉。这就是雪崩事件,是Redis缓存中最致命问题之一(有一个是穿透)。大家可以看看下图

出现雪崩事件后不要急不要慌,我们可以在事故前中后三个方面来思考解决方案

  • 事故前:redis高可用方案,主从+哨兵,集群方案,避免全盘崩溃

  • 事故中:较少数据库的压力,本地Ehcache缓存+限流及降级,避免超过数据库承受压力

  • 事故后:做redis持久化,一旦Redis重启,可从磁盘中快速恢复数据

我们来看看改造后的数据流程,假设用户A发送一个请求,系统先请求本地Ehcache是否有数据,如果没有再去Redis请求数据,如果没有再去数据库请求数据,获取到数据后同步到Ehcache和redis

限流组件的作用:可以设置每秒请求数次,有多少通过请求,剩余的未通过的可以走降级处理,返回一些默认的值,或者友情提示等默认操作。具体流程可以看看下图:

这样做的好处是:

  • 数据库安全:在限流组件可用的情况下,数据库不会挂掉,限流根据确保了每秒多少请求能通过。

  • 部分请求可以被处理:数据库没挂,就意味着至少2/5的请求可以被处理掉

  • 高峰时期部分请求无法处理到,需要用户多次点击,因为只有2/5的请求被处理,剩下的请求,用户刷不出来界面,需要多点击几次

  • redis设置的缓存失效时间不是设置成同一个时间,可根据功能、业务、请求接口灵活设置缓存时间:setRedis(key, value, time+Math.random()*10000);

2.3 缓存穿透

缓存穿透是指缓存和数据库中都没有的数据,用户(黑客)不断发起请求,导致请求直接查询数据库,这种恶意行为攻击场景的会直接导致数据库挂掉,数据流程如下图所示

image

处理这种情况相对比较简单点,这种情况是绕过redis或本地缓存直接到达数据库,可以采取以下方案:

  • 在请求接口层可以做一些校验,比如用户签权、参数校验,不合法的请求直接return,

  • 还可以针对有效id做认证或直接拦截,不符合的id直接过滤或采用统一key保存到redis,下次不合法的id请求时,直接到缓存中获取数据

  • 采用redis的高级接口Bloom Filter,利用高效的数据结构和算法快速判断出你这个 Key 是否在数据库中存在,不存在你 return 就好了,存在你就去查 DB 刷新 KV 再 return

2.4 缓存击穿

上面讲的穿透是针对大面积数据请求,那么击穿是针对一点(一个key)来导致redis异常,但某个key是非常热点,请求非常频繁,处于集中式访问现象,当这个key失效(过期)时,大量的请求就会击穿了缓存,直接请求数据库,就像在屏障中凿开了一个洞。

不同场景下缓存击穿解决方案

  • 数据基本不变:热点数据value基本不更新时,可以设置成永不过期

  • 数据更新不频繁:缓存刷新流程耗时较少时,可采用redis、zookeeper等分布式中间件的分布式互斥锁或者本地互斥锁保证少量的请求能请求到数据库并重新更新缓存,其他的流程等锁释放后才可以访问新缓存

  • 数据更新频繁:采用定时线程,在缓存过期前主动重新构建缓存或延长过期时间,保证所有的请求能一直访问缓存

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

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

相关文章

helm部署相关服务过程中问题记录

在学习helm部署相关服务过程中出现一些相关问题,自己记录并供大家一起学习!!! 【问题1】部署helm 获取软件包失败 在通过wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz文件过程发现无法…

消息中间件的定义

中间件(middleware)是基础软件的一大类,属于可复用的软件范畴。中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的…

【软考数据库】第二章 程序语言基础知识

目录 2.1 程序设计语言的基本概念2.2 程序设计语言的基本成分2.3 编译程序基本原理 前言: 笔记来自《文老师软考数据库》教材精讲,精讲视频在b站,某宝都可以找到,个人感觉通俗易懂。 2.1 程序设计语言的基本概念 程序设计语言是…

Nginx中的location规则与rewrite重写

location与rewrite的区别 rewrite :对访问的域名或者域名内的URL路径地址重写 location:对访问的路径做访问控制或者代理转发 从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获…

常见的3d bounding box标注工具

0. 简介 对于3d bounding box而言,近几年随着自动驾驶的火热,其标注工具也日渐多了起来,本篇文章不讲具体的算法,这里主要聚焦于这些开源的3d bounding box标注工具,以及他们是怎么使用的。这里借鉴了我想静静&#x…

牛客前端编程语言错题2

【语法】 名为“ctx”的变量是某个HTML5画布对象的上下文。以下代码绘制的是什么() Ctx.arc(x,y,r,0,Math.PI,true); 在给定点绘制一个矩形 从一个点到另一个点绘制一条直线 在给定点绘制一个半圆 在给定点绘制一个圆 链接:https://www.now…

分布式系统反向代理设计与正向代理

反向代理与正向代理分析 代理服务器:位于发起请求的客户端与原始服务器端之间的一台跳板服务器,代理服务器分为正向代理服务器和反向代理服务器 正向代理 :代理客户端,隐藏了真实的请求客户端,服务端不知道真实的客户…

安全响应中心 — 垃圾邮件事件报告(4.18)

天空卫士安全响应中心邮件安全小组是成都研发中心的核心部门之一。在日常工作中,对大量样本进行分析并提取规则,实现对包含垃圾内容、钓鱼内容的邮件进行检测和隔离,从而抵御对业务电子邮件的入侵,防止钓鱼邮件等隐蔽邮件威胁。其…

9. 树的进阶

9. 树的进阶 ​ 之前我们学习过二叉查找树,发现它的查询效率比单纯的链表和数组的查询效率要高很多,大部分情况下,确实是这样的,但不幸的是,在最坏情况下,二叉查找树的性能还是很糟糕。 例如我们依次往二叉…

基于tensorflow2.x的多GPU并行训练

由于最近训练transformer,在单卡上显存不够,另外一块卡上也无法加载,故尝试使用双卡并行的策略。将基本的流程、遇见的难题汇总在这里。分布策略解释 使用官方给出的tf.distribute.MirroredStrategy作为分布策略。这个策略通过如下的方式运行…

Echarts渲染行政区划,实现聚焦高亮交互

首先需要准备行政区划的JSON数据&#xff0c;可以在DataV获取省市区的JSON数据。 最终效果图 渲染地图 建立一个地图容器&#xff0c;注意要给宽高 <!-- 地图容器 --> <div id"map"></div>请求JSON数据&#xff0c;渲染地图 $(function() {var …

Ubuntu 20版本将动态ip修改为静态ip时,ping 不通网络

问题描述&#xff1a; 在对Ubuntu 20版本将动态ip修改为静态ip时&#xff0c;ping www.baidu.com ping不通了 火狐浏览器没有了网路&#xff0c;下载不了东西 一直卡在这里不动 问题出在哪里还是配置ip dns 网关的问题 如果我们在当初安装ubuntu 时&#xff0c;将网络设置成…

24年专转本想要成功我们一个怎样做

23年转本报名人数创造高峰&#xff0c; 24年转本的同学们 如何脱颖而出&#xff0c;成功转本呢&#xff1f;一、明确转本目的 转本是一场重要的考试&#xff0c;有人把转本比喻为第二次高考。面对这唯一的进入本科院校学习的机会&#xff0c;考还是不考&#xff1f; 很多同…

小六壬学习笔记

小六壬学习笔记 简介前置知识:十二地支和十二时辰适用范围起课&#xff1a;月令日时卦象 疑问&#xff1a;遇到闰月怎么办&#xff1f;禁忌数字起课法手机计算器取余数 简单解卦 简介 马前课&#xff0c;又名&#xff1a;小六壬。 小六壬历史渊源&#xff1a;https://m.sohu.c…

RXJava2的基本概念与常见操作符使用实例解析

RXJava2是什么&#xff1f;可以简单介绍一下其特点和应用场景吗&#xff1f; RXJava2是基于观察者模式和链式编程思想的异步编程库&#xff0c;它可以用来优雅地处理异步操作&#xff0c;比如网络请求、数据库查询、文件I/O等操作&#xff0c;减少了回调嵌套&#xff0c;提高了…

【LeetCode】剑指 Offer 68. 二叉树中两个节点的最低公共祖先 p326 -- Java Version

1. 题目介绍&#xff08;68. 二叉树中两个节点的最低公共祖先&#xff09; 面试题68&#xff1a;二叉树中两个节点的最低公共祖先&#xff0c; 一共分为两小题&#xff1a; 题目一&#xff1a;二叉搜索树的最近公共祖先题目二&#xff1a;二叉树的最近公共祖先 2. 题目1&#x…

目标检测 pytorch复现SSD目标检测项目

目标检测 pytorch复现SSD目标检测项目 0、简介1、模型整体框架&#xff08;以VGG16为特征提取网络&#xff09;3、默认框&#xff08;default box&#xff09;的生成--相当于Faster-RCNN中生成的anchor4、预测层的实现原理&#xff1a;5、正负样本的选取6、损失的计算原理6、以…

SpringCloud-9、Sleuth+Zipkin

先吐槽下csdn&#xff0c;编辑器不知道怎么回事&#xff0c;快捷键一下就没有&#xff0c;现在用起来糟心 --- - 这些都用不了&#xff0c;求帮助。 基本介绍 Sleuth:分布式服务跟踪组件 /ZipKin Sleuth/ZipKin-搭建链路监控实例 官网&#xff1a;GitHub - spring-cloud/s…

【移动端网页布局】移动端网页布局基础概念 ⑦ ( 在 PhotoShop 中使用 Cutterman 切二倍图 | 使用二倍图作为背景图像 )

文章目录 一、在 PhotoShop 中使用 Cutterman 切二倍图二、使用二倍图作为背景图像 一、在 PhotoShop 中使用 Cutterman 切二倍图 参考 【CSS】PhotoShop 切图 ③ ( PhotoShop 切图插件 - Cutterman | 下载、安装、启动、注册、登录 Cutterman - 切图神奇 插件 | 使用插件进行切…

selenium应用之抓取b站黑马视频目录建立学习计划Excel

需求故事&#xff1a; 最近时间一下子多了起来&#xff0c;用来学习Java是最合适不过了&#xff0c;但是去b站看视频难免会没有自制力&#xff0c;于是决定用selenium来抓取b站黑马Java视频的目录创建一个学习计划的Excel&#xff0c;便于进行学习进度的管理。 注&#xff1a;纯…