缓存中的共享和私有缓存

简介: 【6月更文挑战第7天】本文介绍了缓存数据库的分类和作用,主要分为私有缓存和共享缓存。 不应将缓存视为关键数据的唯一来源,重要更新应同步至持久性存储。

1 简介

我们常说 缓存数据库,一般默认就是第三方的缓存数据库,比如memory cache,redis,云 cache等。

那么不同名称的缓存数据库如何区分?

coffe大海.jpg

私有缓存存储在单个进程的内存中,适合小量静态数据,而多个实例可能造成数据不一致。

共享缓存提供统一视图,适用于多实例环境,通过集群实现可扩展性,但访问速度稍慢。

缓存能提升系统性能和可伸缩性,减少对原始数据存储的依赖,尤其适用于读多写少的情景。

2 分布式缓存的分类

缓存是一种常见的技术,旨在提高系统的性能和可伸缩性。

它通过将经常访问的数据临时复制到靠近应用程序的快速存储来缓存数据。

当客户端实例重复读取相同的数据时,缓存最有效,尤其是在以下所有条件都适用于原始数据存储的情况下:

数据保持相对静态。
数据库与缓存的速度相比,很慢。
数据库的数据受到高度争用的影响。
当网络延迟可能导致访问速度变慢时,距离很远。

如果此快速数据存储的位置比原始源更靠近应用程序,则缓存可以通过更快地提供数据来显著缩短客户端应用程序的响应时间。

分布式应用程序在缓存数据时通常实现以下一种或两种策略:

它们使用专用缓存,其中数据本地保存在运行应用程序或服务实例的计算机上。
它们使用共享缓存,作为可由多个进程和计算机访问的公共源。

在这两种情况下,都可以在客户端和服务器端执行缓存。

客户端缓存由为系统(如 Web 浏览器或桌面应用程序)提供用户界面的进程完成。

服务器端缓存由提供远程运行的业务服务的进程完成。

3 私有缓存

最基本的缓存类型是内存中存储。它保存在单个进程的地址空间中,并由该进程中运行的代码直接访问。

这种类型的缓存可以快速访问。它还为存储适量的静态数据提供有效的方法。

缓存的大小通常受托管进程的计算机上可用内存量的约束。

如果需要缓存比内存中物理可能的信息更多的信息,则可以将缓存的数据写入本地文件系统。

此过程的访问速度比内存中的数据慢,但仍应比通过网络检索数据更快、更可靠。

如果同时运行使用此模型的应用程序的多个实例,则每个应用程序实例都有自己的独立缓存,用于保存自己的数据副本。

将缓存视为过去某个时间点原始数据的快照。如果此数据不是静态的,则不同的应用程序实例可能在其缓存中保存不同版本的数据。

因此,这些实例执行的相同查询可能会返回不同的结果。

4 共享缓存

如果使用共享缓存,则有助于缓解每个缓存中的数据可能不同的问题,内存中缓存可能会发生这种情况。

共享缓存可确保不同的应用程序实例看到相同的缓存数据视图。它将缓存定位在单独的位置,该位置通常作为单独服务的一部分托管。

共享缓存方法的一个重要好处是它提供的可伸缩性。许多共享缓存服务是通过使用服务器群集实现的,并使用软件在群集中透明地分发数据。

应用程序实例只需向缓存服务发送请求。底层基础结构确定缓存数据在群集中的位置。您可以通过添加更多服务器轻松扩展缓存。

共享缓存方法有两个主要缺点:

缓存的访问速度较慢,因为它不再在本地保留到每个应用程序实例。
实现单独缓存服务的要求可能会增加解决方案的复杂性。

5 小结

那么何时使用缓存呢?拥有的数据越多,需要访问此数据的用户数量越多,缓存的好处就越大。

缓存可减少与处理原始数据存储中的大量并发请求相关的延迟和争用。

例如,数据库可能支持有限数量的并发连接。但是,从共享缓存(而不是基础数据库)检索数据使客户端应用程序可以访问此数据,即使当前可用连接数已用尽也是如此。

此外,如果数据库变得不可用,客户端应用程序可能能够继续使用缓存中保存的数据。

考虑缓存频繁读取但不经常修改的数据(例如,读取操作比例高于写入操作的数据)。

但是,我们不建议将缓存用作关键信息的权威存储。相反,请确保应用程序不能丢失的所有更改始终保存到持久性数据存储中。

如果缓存不可用,应用程序仍可以使用数据存储继续运行,并且不会丢失重要信息。

目录
相关文章
|
自然语言处理 算法 Java
C/C++ 程序员编程规范之注释
C/C++ 程序员编程规范之注释
1196 1
解决在idea中构建项目出现不能创建java类,只能创建文件的问题~
解决在idea中构建项目出现不能创建java类,只能创建文件的问题~
442 0
|
9月前
|
存储 安全 数据可视化
什么是CMS?如何选择CMS建设网站
本文介绍CMS的核心概念、构成及优势,以PageAdmin为例,指导用户选择和使用合适的CMS工具。
1273 2
|
11月前
|
存储 JSON Java
淘宝店铺全量商品接口实现:从店铺解析到批量采集技术方案
本文介绍了淘宝店铺商品数据采集的技术实现方案,涵盖店铺页面解析、商品分页遍历及反爬策略应对。内容聚焦于合规性要求与核心技术难点,提供基于Python的实战代码,实现高效、稳定且符合平台规则的商品数据批量获取,适用于电商分析与竞品监控场景。
|
存储 自然语言处理 API
HarmonyOS SDK使用:熟悉HarmonyOS提供的开发工具和API
【10月更文挑战第21天】随着智能设备的普及,操作系统的重要性日益凸显。华为推出的HarmonyOS凭借其跨平台、分布式特性受到广泛关注。本文将从开发工具、API使用、SDK更新维护及社区支持等方面,探讨HarmonyOS SDK的使用,旨在帮助开发者高效利用这一强大平台,开启鸿蒙应用开发之旅。
1504 5
|
机器学习/深度学习 弹性计算 Ubuntu
“炫技”还是“真硬核”,OpenPPL 实测阿里「倚天 710」芯片
本文将以「深度学习模型推理应用」为出发点,对「倚天 710」这款 ARM Server 芯片进行性能实测。
2946 0
“炫技”还是“真硬核”,OpenPPL 实测阿里「倚天 710」芯片
Zerotier+Parsec五分钟实现外网远程访问校园或公司内网
本文介绍了如何通过Zerotier和Parsec软件在五分钟内实现外网对校园或公司内网的远程访问,包括安装软件、配置内网穿透和实现远程控制的详细步骤。
2763 3
Zerotier+Parsec五分钟实现外网远程访问校园或公司内网
|
存储 监控 算法
在Linux中,什么是交换空间?
在Linux中,什么是交换空间?
|
算法 数据可视化 计算机视觉
论文阅读笔记 | 目标检测算法——Generalized Focal Lossv1,v2
论文阅读笔记 | 目标检测算法——Generalized Focal Lossv1,v2
2172 0
论文阅读笔记 | 目标检测算法——Generalized Focal Lossv1,v2
|
存储 JavaScript 前端开发
[JS] ES Modules的运作原理
【9月更文挑战第16天】ES Modules(ECMAScript Modules)是 JavaScript 中的一种模块化开发规范,适用于浏览器和 Node.js 环境。它通过 `export` 和 `import` 关键字实现模块的导出与导入。模块定义清晰,便于维护和测试。JavaScript 引擎会在执行前进行静态分析,确保模块按需加载,并处理循环依赖。ES Modules 支持静态类型检查,现代浏览器已原生支持,还提供动态导入功能,增强了代码的灵活性和性能。这一规范显著提升了代码的组织和管理效率。
396 1