1 简介
我们常说 缓存数据库,一般默认就是第三方的缓存数据库,比如memory cache,redis,云 cache等。
那么不同名称的缓存数据库如何区分?
私有缓存存储在单个进程的内存中,适合小量静态数据,而多个实例可能造成数据不一致。
共享缓存提供统一视图,适用于多实例环境,通过集群实现可扩展性,但访问速度稍慢。
缓存能提升系统性能和可伸缩性,减少对原始数据存储的依赖,尤其适用于读多写少的情景。
2 分布式缓存的分类
缓存是一种常见的技术,旨在提高系统的性能和可伸缩性。
它通过将经常访问的数据临时复制到靠近应用程序的快速存储来缓存数据。
当客户端实例重复读取相同的数据时,缓存最有效,尤其是在以下所有条件都适用于原始数据存储的情况下:
数据保持相对静态。
数据库与缓存的速度相比,很慢。
数据库的数据受到高度争用的影响。
当网络延迟可能导致访问速度变慢时,距离很远。
如果此快速数据存储的位置比原始源更靠近应用程序,则缓存可以通过更快地提供数据来显著缩短客户端应用程序的响应时间。
分布式应用程序在缓存数据时通常实现以下一种或两种策略:
它们使用专用缓存,其中数据本地保存在运行应用程序或服务实例的计算机上。
它们使用共享缓存,作为可由多个进程和计算机访问的公共源。
在这两种情况下,都可以在客户端和服务器端执行缓存。
客户端缓存由为系统(如 Web 浏览器或桌面应用程序)提供用户界面的进程完成。
服务器端缓存由提供远程运行的业务服务的进程完成。
3 私有缓存
最基本的缓存类型是内存中存储。它保存在单个进程的地址空间中,并由该进程中运行的代码直接访问。
这种类型的缓存可以快速访问。它还为存储适量的静态数据提供有效的方法。
缓存的大小通常受托管进程的计算机上可用内存量的约束。
如果需要缓存比内存中物理可能的信息更多的信息,则可以将缓存的数据写入本地文件系统。
此过程的访问速度比内存中的数据慢,但仍应比通过网络检索数据更快、更可靠。
如果同时运行使用此模型的应用程序的多个实例,则每个应用程序实例都有自己的独立缓存,用于保存自己的数据副本。
将缓存视为过去某个时间点原始数据的快照。如果此数据不是静态的,则不同的应用程序实例可能在其缓存中保存不同版本的数据。
因此,这些实例执行的相同查询可能会返回不同的结果。
4 共享缓存
如果使用共享缓存,则有助于缓解每个缓存中的数据可能不同的问题,内存中缓存可能会发生这种情况。
共享缓存可确保不同的应用程序实例看到相同的缓存数据视图。它将缓存定位在单独的位置,该位置通常作为单独服务的一部分托管。
共享缓存方法的一个重要好处是它提供的可伸缩性。许多共享缓存服务是通过使用服务器群集实现的,并使用软件在群集中透明地分发数据。
应用程序实例只需向缓存服务发送请求。底层基础结构确定缓存数据在群集中的位置。您可以通过添加更多服务器轻松扩展缓存。
共享缓存方法有两个主要缺点:
缓存的访问速度较慢,因为它不再在本地保留到每个应用程序实例。
实现单独缓存服务的要求可能会增加解决方案的复杂性。
5 小结
那么何时使用缓存呢?拥有的数据越多,需要访问此数据的用户数量越多,缓存的好处就越大。
缓存可减少与处理原始数据存储中的大量并发请求相关的延迟和争用。
例如,数据库可能支持有限数量的并发连接。但是,从共享缓存(而不是基础数据库)检索数据使客户端应用程序可以访问此数据,即使当前可用连接数已用尽也是如此。
此外,如果数据库变得不可用,客户端应用程序可能能够继续使用缓存中保存的数据。
考虑缓存频繁读取但不经常修改的数据(例如,读取操作比例高于写入操作的数据)。
但是,我们不建议将缓存用作关键信息的权威存储。相反,请确保应用程序不能丢失的所有更改始终保存到持久性数据存储中。
如果缓存不可用,应用程序仍可以使用数据存储继续运行,并且不会丢失重要信息。