数据库基础:入门理解缓存

问题:什么是缓存?

  • 缓存就是数据交换的缓冲区,是存贮数据的临时地方。
  • 缓存的本质就是用空间换时间。
  • 缓存的例子:超市的展架上存放的展品(缓存区)就可以理解为缓存,看到有的话就可以直接拿然后付钱,如果没有的话,我们需要问售货员(服务器),然后售货员查询仓库(数据库)有没有然后拿给用户。可见,从仓库拿肯定会比用户直接从展架上拿更麻烦。

问题:缓存与缓冲的区别是什么?

  • 缓冲与缓存的区别:
    • 相同点:
      • 两者均指临时存储区域
    • 不同点:
      • 缓冲的目的是提升发送方与接收方之间的数据传输效率。
      • 缓存的目的是减少服务器频繁读取数据的流程。
  • 缓冲的例子:要将一堆鸡蛋从A点搬到B点,不使用箩筐运的时候就只能一只一只效率低下的运,使用箩筐(缓冲区)时可以一批一批的运。箩筐临时存储了小批量的鸡蛋。

问题:为什么要使用缓存?

  • 优点:
    • 减少数据库IO,避免数据库繁忙奔溃
    • 减轻服务器压力,增加吞吐量。
    • 减少网络延迟,加速数据访问的存储。
  • 缺点:
    • 缓存会增加空间的使用
    • 数据的实时性,造成数据的不一致(缓存数据库与持久化数据库数据不一致)

问题:缓存的起源——CPU缓存,是怎样的?

  • CPU具有三级缓存(空间大小递升)
    • L1:核心独享,主要当担的工作是缓存指令和缓存数据。速度最快,空间最小。
    • L2:核心独享,主要为了协调一级缓存和内存之间的速度。速度比L1慢,空间可比L1大。
    • L3:核心共享,主要为了降低内存的延迟,速度最慢(相较L1、L2),空间最大。
  • CPU在访问数据时先访问L1,L1数据没有,就会访问L2,L2数据没有,就会访问L3,L3数据也没有时就会访问到内存。
    在这里插入图片描述

问题:缓存的读写流程如何设计?

    • 关注穿透的路径:没有读到数据,读取缓存后的存储,如CPU读取从L1->L2->L3->内存->硬盘
    • 穿透率:没有命中数据的次数/总访问数据次数
    • 写入穿透:缓存和存储数据一起写
    • 回写:
      • 1、先写缓存
      • 2、延迟写入存储,有三种策略:按时延迟写、缓冲延迟写、其他事件触发写

问题:常用的缓存数据结构有哪些?

  • 字典
    • HashMap
    • TreeMap
    • LinkedHashMap
    • HashSet
    • TreeSet
  • 队列
    • Queue
    • PriorityQueue
  • 集合
    • Array
    • List

问题:缓存空间有限,那么缓存置换策略有哪些?

  • 先到先得(FIFO)
  • 保留热(频繁访问)数据,移除冷数据
    • 最近最少使用(LFU):在每个缓存条目增加使用频次(代价大)
    • 最近最久未使用(LRU):
      • 每个缓存条目增加失效时间定期清理
      • 使用CPU的binary tree算法模拟
      • 使用链表队列模拟:LinkedHashMap模拟,先进先出,其中某个数据被访问了就直接断开出列重新进队。如下图所示:
        在这里插入图片描述
  • MRU:最近最长使用
    • 数据库读取了一大批数据(占用空间大),需要尽快淘汰情况下使用。
    • 通常结合LRU一起使用。

问题:常见的缓存设计:

  • 文件缓存:缓冲区的设计等
  • 浏览器缓存:网页的缓存、cookie的缓存等
  • 数据库缓存:redis数据库进行数据缓存等

参考:

https://baike.baidu.com/item/%E4%B8%89%E7%BA%A7%E7%BC%93%E5%AD%98/1528157?fr=aladdin
https://zhuanlan.zhihu.com/p/136739184

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌白在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值