什么是内存缓存,它是如何工作的?
Posted
技术标签:
【中文标题】什么是内存缓存,它是如何工作的?【英文标题】:What is in-memory cache and how does it work? 【发布时间】:2021-08-15 23:27:48 【问题描述】:我正在阅读有关 Redis 和 Apache ignite 的信息,它们都是内存缓存,也充当分布式缓存。我想知道什么是内存缓存?数据存储在哪里?在正在使用应用程序的本地系统的内存中还是在托管应用程序的服务器的内存中?内存缓存是如何工作的? 例子: 带有 ignite 缓存的应用程序正在 x IP 地址上运行,而我正在使用 y IP 地址上的应用程序,因此缓存将存储在 x IP 地址系统或 y IP 地址系统的内存中?
还有,我们说分布式缓存是什么意思?
【问题讨论】:
【参考方案1】:内存中的缓存可以被认为是一个缓存,它具有数据库的性能关键信息/数据,在应用程序中的请求之间共享。可以直接访问数据/内存,而不是通过其他机制,使数据库相关操作能够高效运行,从而提高系统的吞吐量和响应能力。
一般来说,在基于部署模型的分布式缓存的情况下,缓存内存可以分布在数据库和应用程序之间。该高速缓存存储器可以分布在节点之间,并且应基于分布式哈希表和数据类型进行操作。从各个节点的缓存中访问数据可以反过来应用内存中的缓存逻辑来带来性能优化。
这是一个使用Amazon Elastic Cache实现它的示例
如您所见,Amazaon Elastic Cache 解决方案在每个节点中运行一个缓存引擎,该引擎实施缓存协议/算法,并且 Amazon Elastic Cache 可以在特定节点中支持 6 到 67 GB 的缓存大小。 DNS 名称在创建时分配给每个缓存节点,您需要将节点的 DNS 名称配置到正在使用的客户端库中。一旦您的应用程序向集群调用 Put 或 Get 请求,库将使用散列函数在算法上选择特定节点,该函数应将数据分散到节点上,并帮助从节点中获取相同的数据。
【讨论】:
【参考方案2】:分布式缓存partitions/shards 您的数据跨多个集群节点。这允许利用整个集群的内存和 CPU 资源,以及负载平衡请求。节点是一个进程,可以在您的物理服务器、虚拟机上运行,或者只是一个 Kubernetes pod。 This article 可能有助于理解基础知识。
通常,应用程序需要知道至少一个集群节点的 IP 地址才能打开连接。连接打开后,您将以类似于关系数据库的方式使用集群 - 只需发出 SQL 请求、计算任务并执行其他操作。
此外,请观看 In-Memory Computing Essentials for Software Engineers 录音,该录音涵盖了您的大部分问题,并向您介绍了 Ignite 的基本功能。有free instructor-led training不时安排在这个话题上。
【讨论】:
还有一件事,所以当我们说如果数据不存在于 ignite 缓存中或称之为缓存未命中,那么 ignite 会调用该数据的数据库,所以这里 ignite 调用的数据库是只有 ignite 数据库还是某个 3rd 方数据库,简而言之,Ignite 是否有一个单独的数据库并将一些数据放入 ignite 缓存中还是只有缓存? 如果您进行键值查找,Ignite 会自动从第 3 方数据库加载值。如果 Ignite 在本机持久化中持久化数据,那么它会为任何 API 调用(Sql、键值、扫描查询等)读取磁盘数据ignite.apache.org/arch/multi-tier-storage.html以上是关于什么是内存缓存,它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章