16 | 缓存策略:如何使用缓存来减少磁盘IO?

使用内存作为缓存来加速应用程序的访问速度,是几乎所有高性能系统都会采用的方法

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

使用缓存,首先你就会面临选择读缓存还是读写缓存的问题。他们唯一的区别就是,在更新数据的时候,是否经过缓存。

Kafka 使用的 PageCache,它就是一个非常典型的读写缓存。操作系统会利用系统空闲的物理内存来给文件读写做缓存,这个缓存叫做 PageCache。应用程序在写文件的时候,操作系统会先把数据写入到 PageCache 中,数据在成功写到 PageCache 之后,对于用户代码来说,写入就结束了。然后,操作系统再异步地把数据更新到磁盘的文件中。

读写缓存的这种设计,它天然就是不可靠的,是一种牺牲数据一致性换取性能的设计。

另外,写缓存的实现是非常复杂的。应用程序不停地更新 PageCache 中的数据,操作系统需要记录哪些数据有变化,同时还要在另外一个线程中,把缓存中变化的数据更新到磁盘文件中。在提供并发读写的同时来异步更新数据,这个过程中要保证数据的一致性,并且有非常好的性能,实现这些真不是一件容易的事儿。
所以说,一般情况下,不推荐你来使用读写缓存。

那为什么 Kafka 可以使用 PageCache 来提升它的性能呢?这是由消息队列的一些特点决定的。
  1. 消息队列它的读写比例大致是1:1,因为,大部分我们用消息队列都是一收一发这样使用。这种读写比例,只读缓存既无法给写加速,读的加速效果也有限,并不能提升多少性能。

相关推荐

  1. 16 | 缓存策略如何使用缓存减少磁盘IO

    2024-05-16 06:54:20       34 阅读
  2. 缓存机制如何帮助减轻雪崩效应:

    2024-05-16 06:54:20       24 阅读
  3. 缓存更新策略

    2024-05-16 06:54:20       33 阅读
  4. Spring boot如何使用redis缓存

    2024-05-16 06:54:20       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 06:54:20       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 06:54:20       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 06:54:20       82 阅读
  4. Python语言-面向对象

    2024-05-16 06:54:20       91 阅读

热门阅读

  1. 如何玩转github

    2024-05-16 06:54:20       31 阅读
  2. Pinia:Vue 的强大存储库

    2024-05-16 06:54:20       36 阅读
  3. NIUKE Python:Python入门(上)

    2024-05-16 06:54:20       30 阅读
  4. python脚本编辑oss文件

    2024-05-16 06:54:20       29 阅读
  5. linux编译gdb

    2024-05-16 06:54:20       36 阅读
  6. springboot集成dubbo实现微服务系统

    2024-05-16 06:54:20       34 阅读
  7. 31、Flink 的 DataStream API 数据流算子详解

    2024-05-16 06:54:20       40 阅读
  8. 排序算法面试专用

    2024-05-16 06:54:20       28 阅读