缓存中的共享和私有缓存

本文涉及的产品
函数计算FC,每月15万CU 3个月
容器镜像服务 ACR,镜像仓库100个 不限时长
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
简介: 【6月更文挑战第7天】本文介绍了缓存数据库的分类和作用,主要分为私有缓存和共享缓存。 不应将缓存视为关键数据的唯一来源,重要更新应同步至持久性存储。

1 简介

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

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

coffe大海.jpg

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

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

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

2 分布式缓存的分类

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

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

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

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

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

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

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

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

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

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

3 私有缓存

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

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

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

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

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

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

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

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

4 共享缓存

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

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

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

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

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

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

5 小结

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

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

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

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

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

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

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

目录
相关文章
|
数据可视化 大数据 BI
数据可视化大屏的设计规范和案例参考(使用AxureRP软件设计)
在信息化浪潮中,数据可视化不再仅限于单纯的数据呈现,而是逐渐演变为一种能够直观揭示复杂数据内在关联、趋势变化以及关键洞察的艺术形式。
1121 3
|
SQL 安全 PHP
|
Java Android开发
如何在idea中使用jstl标签库
如何在idea中使用jstl标签库
|
机器学习/深度学习 C# 算法
带你读《C#神经网络编程》之一:快速预览
本书旨在为C#程序员使用神经网络、CNTK等C#库和TensorFlowSharp解决复杂的计算问题时,提供实践指导。本书从神经网络入门知识开始,详细介绍如何使用Encog、Aforge和Accord搭建一个神经网络,帮助你深入理解神经网络相关概念和技术,例如深度网络、感知器、优化算法、卷积网络和自动解码器。此外,还详细讲解如何向.NET应用程序中添加智能特性,例如面部和运动检测、对象检测和标注、语言理解、知识和智能搜索。
|
算法 前端开发 Java
【开发规范系列】(二):Java后台开发规范
【开发规范系列】(二):Java后台开发规范
|
机器学习/深度学习 资源调度 监控
深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
|
12月前
|
存储 自然语言处理 API
HarmonyOS SDK使用:熟悉HarmonyOS提供的开发工具和API
【10月更文挑战第21天】随着智能设备的普及,操作系统的重要性日益凸显。华为推出的HarmonyOS凭借其跨平台、分布式特性受到广泛关注。本文将从开发工具、API使用、SDK更新维护及社区支持等方面,探讨HarmonyOS SDK的使用,旨在帮助开发者高效利用这一强大平台,开启鸿蒙应用开发之旅。
852 5
|
11月前
|
算法 搜索推荐
解读双编码器和交叉编码器:信息检索中的向量表示与语义匹配
在信息检索领域(即从海量数据中查找相关信息),双编码器和交叉编码器是两种至关重要的工具。它们各自拥有独特的工作机制、优势和局限性。本文将深入探讨这两种核心技术。
351 3
解读双编码器和交叉编码器:信息检索中的向量表示与语义匹配
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
1443 11
|
前端开发 小程序 开发者
小程序的前端 display 有什么类型?
【9月更文挑战第1天】小程序的前端 display 有什么类型?
236 2