Redis——缓存

目录

·前言

一、缓存基本概念

1.概念

2.二八定律

二、使用 Redis 作为缓存

三、缓存的更新策略

1.定期生成

2.实时生成

四、Redis 内存淘汰机制

1.通用淘汰策略

(1)FIFO

(2)LRU

(3)LFU

(4)Random

2.Redis 内置的淘汰策略

(1)volatile-lru

(2)allkeys-lru

(3)volatile-lfu

(4)allkeys-lfu

(5)volatile-random

(6)allkeys-random

(7)volatile-ttl

(8)noeviction

五、缓存使用的注意事项

1.缓存预热(Cache preheating)

2.缓存穿透(Cache penetration)

3.缓存雪崩(Cache avalanche)

4.缓存击穿(Cache breakdown)

·结尾


·前言

        我们都知道 Redis 的主要用途有三个方面:存储数据、作为缓存和消息队列,其中,Redis 最常用的场景就是作为缓存了,本篇文章就来和大家介绍一下缓存的基本概念,如何使用 Redis 作为缓存,缓存的更新策略有哪些,Redis 中的内存淘汰机制是怎样的,还有关于使用缓存的一些注意事项,那么就开始本篇文章的正题吧。

一、缓存基本概念

1.概念

        相信大家都有过坐火车的经历,在我们坐火车时会带着一个拉杆箱,这个拉杆箱可以装很多很多的东西,如果我们把所有东西都放在了拉杆箱中,就会遇见一个问题:在我们进入火车站时,需要刷身份证进站,由于你把所有东西都放在了拉杆箱中,此时你就需要把拉杆箱放倒在地上,打开拉杆箱,翻找身份证,刷身份证进站,再把身份证放回拉杆箱,这一系列的繁琐过程结束后,才算是用身份证进入了车站,但是在后面需要刷身份证检票时、刷身份证出站时,在火车上列车员需要用身份证检验时,你都要重复上述取身份证的过程,这种方式就十分低效了,那么怎么做可以更高效呢,我想大家都是知道的,就是把身份证、手机之类经常需要使用的都放在衣服兜中,这样使用起来就会更加方便,高效。

        看完上面的例子,其实我们说的缓存做的事情就类似于我们衣服兜起到的效果,缓存是计算机中的一个经典概念,其核心思路就是把一些常用的数据放到触手可及的地方,方便随时读取,在我们的计算机上,各个硬件读取速度快慢有以下的顺序:

CPU 寄存器 > 内存 > 硬盘 > 网络

        速度快的设备可以作为速度慢的设备的缓存,那么我们就可以使用内存来作为硬盘的缓存,这也是 Redis 主要的用途,还可以使用硬盘来作为网络的缓存,比如浏览器中的缓存。

2.二八定律

        既然缓存读取速度更快,那为什么不都用缓存来存储数据呢?这是因为缓存的内存空间往往是不足的,所以大部分情况下,缓存只是放一些热点数据(访问频繁的数据),缓存存在的意义一是因为它读取速度快,二就是因为“二八定律”。

        二八定律的意思是,我们 20% 的热点数据能够应付 80% 的访问场景,所以我们只需要把这少量的热点数据放到缓存中,就可以应对大多数的场景,从而在整体上有明显的性能提升。

二、使用 Redis 作为缓存

        在我们实际应用中,通常会使用 Redis 作为 Mysql 的缓存,虽然关系型数据库(Mysql)的功能强大,但是它有着一个很大的缺陷,就是性能不高,为什么性能不高,大致有以下几点原因(关系型数据库就以 MySql 为例):

  1. MySql 把数据存储在硬盘上,硬盘上的 IO 速度并不快,尤其是在随机访问时;
  2. 使用 MySql 进行查询过程中,如果查询不能命中索引,就需要进行表的遍历,这会大大的增加硬盘 IO 的次数;
  3. MySql 对于 SQL 在执行会做一系列的解析、校验、优化的工作;
  4. 如果使用 MySql 做一些复杂查询,比如:多表联合查询,需要使用笛卡尔积进行操作,效率会降低很多。

        因为 MySql 等数据库有着上面的问题,所以承担的并发量就有限,一旦请求的数量多了,数据库的压力就会很大,就可能会宕机,那么如何提高 MySql 能承担的并发量呢?有以下两种方案可以做到:

  1. 开源:引入更多的机器,构成数据库集群;
  2. 节流:引入缓存,把一些频繁读取的热点数据保存到缓存中,这样后续在查询数据的时候,先在缓存中查询,如果缓存中已经存在就不再访问 MySql 了。

         Redis 就是作为数据库缓存的常见方案,关于 Redis 可以作为 Mysql 缓存有以下两种原因:

  • Redis 数据在内存中,访问内存速度比访问硬盘快很多;
  • Redis 只是支持简单的 key-value 存储,不涉及复杂的查询的诸多限制规则。

        此时当 Redis 作为 MySql 的缓存后,他们的关系,可以形象的如下图所示:</

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值