缓存中的共享和私有缓存

本文涉及的产品
函数计算FC,每月15万CU 3个月
应用实时监控服务-用户体验监控,每月100OCU免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 【6月更文挑战第7天】本文介绍了缓存数据库的分类和作用,主要分为私有缓存和共享缓存。 不应将缓存视为关键数据的唯一来源,重要更新应同步至持久性存储。

1 简介

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

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

coffe大海.jpg

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

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

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

2 分布式缓存的分类

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

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

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

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

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

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

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

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

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

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

3 私有缓存

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

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

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

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

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

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

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

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

4 共享缓存

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

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

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

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

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

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

5 小结

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

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

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

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

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

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

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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
存储 缓存 边缘计算
有哪些缓存方式?
有哪些缓存方式?
|
4月前
|
存储 缓存 程序员
C++一分钟之-缓存行与伪共享问题
【7月更文挑战第11天】在计算机科学中,缓存是一个至关重要的概念,它能够显著提高数据访问速度。然而,缓存的使用并非没有问题,其中最著名的问题之一就是伪共享。
43 1
|
6月前
|
C++
34共用数据的保护
34共用数据的保护
44 0
|
存储 缓存 JavaScript
本地缓存的区别与联系
本地缓存的区别与联系
|
Web App开发 存储 缓存
什么是强缓存和协商缓存?以及他们的区别?
什么是强缓存和协商缓存?以及他们的区别?
|
存储 缓存 数据库
如果不知道这4种缓存模式,敢说懂缓存吗?
在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交道,最起码也实践过。
|
存储 缓存 Java
「计算机原理」| CPU 缓存 & 缓存一致性 & 伪共享
「计算机原理」| CPU 缓存 & 缓存一致性 & 伪共享
624 0
「计算机原理」| CPU 缓存 & 缓存一致性 & 伪共享
|
安全 Java 编译器
|
缓存 Java
探讨缓存行与伪共享
最近项目中有个需求,需要用到有界队列对访问请求量进行流量削峰请求,同时作为一个缓冲层对请求处理进行后续处理,Java 内置有界队列 ArrayBlockingQueue 可以满足这方面的需求,但是性能上并不满足,于是使用了 Disruptor,它是英国外汇交易公司 LMAX 开发的一个高性能队列,了解到它内部解决伪共享问题,今天就和大家一起学习缓存行与伪共享相关的知识。
211 0
探讨缓存行与伪共享
|
缓存 数据安全/隐私保护 Windows
windows 技巧篇-清除共享地址访问缓存信息,共享路径临时访问用户切换方法
windows 技巧篇-清除共享地址访问缓存信息,共享路径临时访问用户切换方法
628 0
windows 技巧篇-清除共享地址访问缓存信息,共享路径临时访问用户切换方法