🧸欢迎来到dream_ready博客,📜相信您对这篇博客感兴趣o (ˉ▽ˉ;)

📜Redis 学习笔记,超基础,适合零基础和弱基础学习

目录

1、Redis最主要的用途

2、什么是缓存?

2.1、此处介绍一下浏览器的缓存

3、为什么mysql等数据库慢呢?

3.1、为什么说关系型数据库性能不高?

3.2、为什么要引入redis,而不是全部的查询操作都经过mysql呢?

4、如何提高mysql能承担的并发量?

5、如何知道哪些数据是热点数据呢?

5.1、定期生成

5.2、实时生成

5、通用的内存淘汰策略

 6、redis中内置的淘汰策略

7、缓存使用注意事项,缓存可能出现的四大问题(专业术语)

8、缓存预热

9、 缓存穿透

10、 缓存雪崩

11、缓存击穿(缓存瘫痪)


1、Redis最主要的用途

三个方面:

redis和缓存间存在什么关系呢?redis在发挥作用时会遇到哪些问题

2、什么是缓存?

缓存是一种临时存储数据的技术用于在后续请求快速获取先前检索计算的数据,从而加速访问速度

计算机系统中,缓存可以出现多个层次,包括硬件缓存、操作系统缓存和应用程序别的缓存。这种机制的基本思想通过存储一些计算结果或频繁访问的数据,减少对更慢的存储系统(如数据库磁盘)的访问次数,从而提高系统性能响应速度

其实缓存是相对的概念

2.1、此处介绍一下浏览器的缓存

浏览器缓存是指浏览器本地存储访问过的网页资源以便在后续访问相同页面能够更快地加载内容浏览器缓存有助于提高网页加载速度、减轻服务器负担,并提升用户体验

浏览器通过http/https等从服务器获取到数据(html,css,js,图片视频音频字体…)并进行展示

优点举例

        像图片这样的体积大,又不太改变的数据,就可以保存浏览本地(浏览器所在主机硬盘上),后续再打开这个页面,就不必重新从网络获取上述数据了

缺点举例:

        如果前端代码有所修改或者图片内容有所改变,用户看到可能仍然是原来的网页,这就是因为浏览器的缓存,它有些数据默认还是用的缓存中的数据,没有及时更新,导致残留的是旧版本前端代码,引发bug(可以ctrl+F5来强制刷新浏览器缓存)

缓存速度虽然快,但是空间

通常使用redis作为mysql数据库的缓存,因为mysql相比redis来说慢很多

3、为什么mysql数据库慢呢?

此处拿类似mysql的这种关系数据库举例

3.1、为什么关系数据库性能不高?

3.2、为什么引入redis,而不是全部的查询操作都经过mysql呢?

4、如何提高mysql能承担的并发量?

四个大字: 开源   节流

客户端发送的查询数据等请求,会先到达redis,如果redis没有,再查mysql

虽然redis上只能存少数数据,但是大部分请求都是使用的这少数的热点数据(二八原则)

5、如何知道哪些数据是热点数据呢?

这是依靠缓存的更新策略进行实现

5.1、定期生成

会把访问的数据,以日志的形式记录下来,然后针对某个时间段或时间访问高频的数据存储redis

举例:

可以通过定时任务触发

缺点举例:

        比如春节晚会,一般就是过年这几天,但是访问量可能会达到一年中最高的数量,但是过完年后几乎没人再去搜索,它就不适合继续当热词了,但如果按照定时生成策略的话,它会一直是热词

5.2、实时生成

缺点:这样不停地写redis,就会使redis的内存占用越来越多,逐渐达到内存上限(不一定是机器内存上限,redis中也可以配置,最多使用多少内存)

为了解决上述情况,redis就引入了”内存淘汰策略

5、通用的内存淘汰策略

为了解决生成热点数据方法带来的缺点,redis就引入了”内存淘汰策略“

主要有以下几种,下列策略并非局限于Redis,其他缓存也可以按这些策略展开

 这其中的淘汰策略,Random随机了,不太合理,而LFU是按照次数来衡量的,是最靠谱的

 6、redis中内置的淘汰策略

redis里面,有一个配置项,就可以设置redis采取上述那种策略淘汰内存数据

具体采取哪种策略,结合实际场景来具体问题具体分析

相对来说,实时生成是没有定期生成更可控的,更多情况下还是使用定期生成

7、缓存使用注意事项,缓存可能出现的四大问题(专业术语)

8、缓存预热

避免服务器刚启动或者大批key失效没有数据,导致所有的请求都打给mysql,把mysql搞挂了

缓存中的数据是定期生成和定时生成两种实现方式(其余方式也有,此处以这两种举例)

  • 定期生成,这种情况,不涉及”预热“
  • 定时生成就涉及预热

redis服务器首次接入之后,服务器里是没有数据的

此时,所有的请求都会打给mysql,从而造成数据库较大的压力

当然,随着时间推移,redis上的数据越积累越多,mysql承担的压力就逐渐减小

缓存预热,就是用来解决上述问题

9、 缓存穿透

访问的key在redis和数据库中都不存在这个key肯定也没有被更新到redis中

这次查询没有,下次查询,仍然没有,如果像这样的数据,存在很多,并且还反复查询,一样也会给mysql带来很大的压力

为何产生?

原因可能有以下几种

如何解决

通过改进业务/加强监控报警  => 有用,但属于亡羊补牢

更靠谱的方案(降低问题的严重性)

(把所有的key都插入布隆过滤器中)

布隆过滤器本质上是结合hash + bitmap

比较小的空间开销,比较快的时间速度,实现针对key是否存在的判定

10、 缓存雪崩

由于在短时间内,redis上大规模的key失效,导致缓存命中率陡然下降,并且mysql的压力迅速上升,甚至直接泵机

为何产生?

原因可能有以下几种

  1. redis直接挂了   = >  redis泵机/redis集群模式下大量节点泵机
  2. redis好着呢,但是可能之前短时间内设置很多key给redis,并且设置过期时间是相同

补:为什么设置过期时间?

给redis里设置key作为缓存的时候,有的时候为了考虑缓存的时效性,就会设置过期时间(和redis内存淘汰机制,是配合使用的)

如何解决

11、缓存击穿(缓存瘫痪)

缓存击穿(翻译的不太合适),也可以称之为缓存瘫痪(合适)

相当于缓存雪崩特殊情况,针对热点key,突然过期了,导致大量的请求直接访问到数据库上,甚至引起数据库泵机

如何解决

补:

1、解决方案1往往需要服务结构做出较大的调整

2、解决方案2中的服务降级指的是可能本身服务器的功能有十个,但是在特定情况下,适当的关闭一些不重要的功能,只保留核心功能

       功能/服务降级也可以称之为省电模式

       访问数据库的时候使用分布式锁  = >  通过分布式锁,限制数据库的访问频率

🧸欢迎您于百忙之中阅读这篇博客,📜希望这篇博客给您带来了一些帮助,祝您生活愉快!

原文地址:https://blog.csdn.net/dream_ready/article/details/133501439

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_50461.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注