IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 第二十三章 旁路缓存:Redis是如何工作的 -> 正文阅读

[大数据]第二十三章 旁路缓存:Redis是如何工作的

第二十三章 旁路缓存:Redis是如何工作的 ?

缓存的特征

  • 一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存。
  • 以计算机系统为例:

Untitled

  • 可以看到,CPU、内存和磁盘这三层的访问速度从几十 ns 到 100ns,再到几 ms,性能的差异很大。

在计算机系统中,默认有两种缓存:

  • CPU 里面的末级缓存,即 LLC,用来缓存内存中的数据,避免每次从内存中存取数据;
  • 内存中的高速页缓存,即 page cache,用来缓存磁盘中的数据,避免每次从磁盘中存取数据。

Untitled

  • 缓存的第一个特征:在一个层次化的系统中,缓存一定是一个快速子系统,数据存在缓存中时,能避免每次从慢速子系统中存取数据。
    • 对应到互联网应用来说,Redis 就是快速子系统,而数据库就是慢速子系统了。
  • 缓存的第二个特征:缓存系统的容量大小总是小于后端慢速系统的,我们不可能把所有数据都放在缓存系统中。

Redis 缓存处理请求的两种情况

把 Redis 用作缓存时,我们会把 Redis 部署在数据库的前端,业务应用在访问数据时,会先查询 Redis 中是否保存了相应的数据。此时,根据数据是否存在缓存中,会有两种情况:

  • 缓存命中:Redis 中有相应数据,就直接读取 Redis,性能非常快。
  • 缓存缺失:Redis 中没有保存相应数据,就从后端数据库中读取数据,性能就会变慢。
    • 而且,一旦发生缓存缺失,为了让后续请求能从缓存中读取到数据,我们需要把缺失的数据写入 Redis,这个过程叫作缓存更新。

Untitled

使用 Redis 缓存时,有三个基本操作:

  • 应用读取数据时,需要先读取 Redis;
  • 发生缓存缺失时,需要从数据库读取数据;
  • 发生缓存缺失时,还需要更新缓存。

Redis 作为旁路缓存的使用操作

什么叫 旁路缓存 ?

我们把 Redis 称为旁路缓存,也就是说,读取缓存、读取数据库和更新缓存的操作都需要在应用程序中来完成。

使用 Redis 缓存时,具体是怎么操作的 ?

  • 当应用程序需要读取数据时,我们需要在代码中显式调用 Redis 的 GET 操作接口,进行查询;
  • 如果缓存缺失了,应用程序需要再和数据库连接,从数据库中读取数据;
  • 当缓存中的数据需要更新时,我们也需要在应用程序中显式地调用 SET 操作接口,把更新的数据写入缓存。

缓存的类型

按照 Redis 缓存是否接受写请求,我们可以把它分成只读缓存和读写缓存。

只读缓存

  • 当 Redis 用作只读缓存时,删和改操作,应该要将旧缓存删除,等待下一次插入。
  • 而所有的数据写请求,都会直接发往后端的数据库,在数据库中增删改。

具体操作流程

  • 假设业务应用要修改数据 A,此时,数据 A 在 Redis 中也缓存了,那么,应用会先直接在数据库里修改 A,并把 Redis 中的 A 删除。
  • 等到应用需要读取数据 A 时,会发生缓存缺失,此时,应用从数据库中读取 A,并写入 Redis,以便后续请求从缓存中直接读取,如下图所示:

Untitled

只读缓存的优点

  • 所有最新的数据都在数据库中,而数据库是提供数据可靠性保障的,这些数据不会有丢失的风险。
  • 当我们需要缓存图片、短视频这些用户只读的数据时,就可以使用只读缓存这个类型了。

读写缓存

  • 当 Redis 用作读写缓存时,所有的增删改查操作都是通过缓存这一层。
  • 得益于 Redis 的高性能访问特性,处理结果会快速返回给业务应用,可以提升业务应用的响应速度。
  • 读写缓存的最新数据都在 Redis 中,因为 Redis 是内存数据库,所以存在数据丢失的风险。
  • 根据业务应用对数据可靠性缓存性能的不同要求,我们会有同步直写异步写回两种策略。其中,同步直写策略优先保证数据可靠性,而异步写回策略优先提供快速响应。

同步直写策略

  • 同步直写是指,写请求发给缓存的同时,也会发给后端数据库进行处理,等到缓存和数据库都写完数据,才给客户端返回。
  • 这样,即使缓存宕机或发生故障,最新的数据仍然保存在数据库中,这就提供了数据可靠性保证。
  • 不过,同步直写会降低缓存的访问性能。
    • 这是因为缓存中处理写请求的速度是很快的,而数据库处理写请求的速度较慢。
    • 即使缓存很快地处理了写请求,也需要等待数据库处理完所有的写请求,才能给应用返回结果,这就增加了缓存的响应延迟。

异步写回策略

  • 而异步写回策略,则是优先考虑了响应延迟。
  • 此时,所有写请求都先在缓存中处理。等到这些增改的数据要从缓存中淘汰出来时,缓存才将它们写回后端数据库。
  • 这样一来,处理这些数据的操作是在缓存中进行的,很快就能完成。只不过,如果发生了掉电,而它们还没有被写回数据库,就会有丢失的风险了。

Untitled

如何选择只读缓存还是读写缓存 ?

  • 如果需要对写请求进行加速,我们选择读写缓存;
  • 如果写请求很少,或者是只需要提升读请求的响应速度的话,我们选择只读缓存。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-04 00:01:46  更:2022-06-04 00:02:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/29 7:59:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码