Memcached Interview Questions

Memcached 面试题

2025 年 4 月 28 日 | 阅读 9 分钟

以下是关于 Memcached 最常被问到的面试题及答案列表。

1) 什么是 Memcached?

Memcached 是一个通用的免费开源、高性能的分布式内存对象缓存系统。它通过在 RAM 中缓存数据和对象来加速数据库驱动的网站。

简单来说,Memcached 是一个临时存储数据的组件,可以存储 1 小时/6 小时/12 小时/1 天等,您可以将此组件集成到您的应用程序中以提高其性能。


2) Memcached 是用什么语言编写的,作者是谁?

Memcached 是用“C 语言”编写的。它由 Brad Fitzpatrick 于 2003 年开发。最初,它是为 LiveJournal 开发的,但现在已被 Wikipedia、Twitter、Facebook、Flickr、Netlog、YouTube 等使用。


3) Memcached 如何工作?

请看以下步骤了解 Memcached 的工作原理:

  • Memcached 首先尝试获取用户详细信息,然后浏览器将请求发送到应用程序。
  • 应用程序调用 Memcached 来获取特定用户的信息。
  • 如果在 Memcached 中找到结果,则从 Memcached 返回结果。
  • 如果在 Memcached 中未找到结果,应用程序会将请求发送到数据库并将结果保存在 Memcached 中。
  • 每个 Memcached 都有一个唯一的键。
  • Get/Set 操作都是基于键进行的。
  • 您也可以删除一个或多个键。
  • 您还可以为一或多个键分配标签。

4) Memcached 的第一个版本是什么时候发布的?

Memcached 的第一个版本于 2003 年 5 月 22 日发布。


5) Memcached 的用途是什么?它通常用于哪些类型的网站?

Memcached 用于提高动态数据库驱动网站的速度。它将数据和对象缓存到 RAM 中以减少执行时间。

它通常用于:

  • 社交网络网站的用户资料缓存。
  • 内容聚合,即 HTML/页面缓存。
  • 电子商务网站的会话和 HTML 缓存。
  • 基于位置的服务,用于数据库查询扩展。
  • 游戏和娱乐服务中的会话缓存。
  • 它还可以用于跟踪 cookie/用户资料以进行广告定位。

6) Memcached 的最佳用途是什么?

Memcached 的最佳用途:

  • 它易于在 Windows 和 UNIX 操作系统上安装。
  • 它为 Java、PHP、C/C++、Python、Ruby、Perl 等所有主要语言提供 API 集成。
  • 通过缓存提高 Web 应用程序的性能。
  • 减少数据库服务器的负担。
  • 它允许您删除一个或多个值。
  • 它允许您更新键的值。

7) Memcached 的缺点/限制是什么?

Memcached 的局限性或缺点列表:

  • Memcached 不能持久地、永久地存储数据。
  • Memcached 不是数据库。它只存储临时数据。
  • Memcached 无法缓存大型对象。
  • Memcached 不是特定于应用程序的。
  • Memcached 不具备容错能力或高可用性。

8) 在什么情况下缓存无法保留已存储的信息?

缓存无法在以下情况下保留已存储的信息:

  • 当缓存的分配内存耗尽时。
  • 当从缓存中删除了某个项目时。
  • 当缓存中的单个项目过期时。

9) Memcache 和 Memcached 之间有什么区别?

Memcache 和 Memcached 之间的区别:

MemcacheMemcached
Memcache 模块提供了方便的面向过程和面向对象的接口来访问 Memcached。Memcached 是一个高性能的分布式内存对象缓存系统。
Memcache 是一个扩展,允许您通过方便的面向对象(OOP)和面向过程的接口进行操作。Memcached 是一个扩展,它使用 libMemcached 库提供与 Memcached 服务器通信的 API。
Memcache 模块提供了一个会话处理器 (Memcache)。Memcached 提供了一个会话处理器 (Memcached)。
它旨在减少动态 Web 应用程序中的数据库负载。它通过减少数据库负载来提高动态 Web 应用程序的性能。这是最新的 API。

10) 我们可以将单个 Memcache 实例共享给多个项目吗?

是的,我们可以将单个 Memcache 实例共享给多个项目,因为 Memcache 作为内存存储空间,可以运行在一台或多台服务器上。在 Memcache 中,您还可以配置您的客户端连接到一组特定的实例。

我们也可以在同一台主机上运行两个不同的 Memcache 进程,它们是完全独立的,没有任何干扰。如果您对数据进行分区,那么知道从哪个实例获取数据或放入数据是很重要的。


11) 解释 SAP HANA 和 Memcached 之间的区别?

SAP HANA 是一个内存 RDBMS,主要用于加速 SAP 应用程序,而 Memcached 是一个键/值缓存系统,用于访问 RDBMS 和 NoSQL 数据库。


12) 如何使用 telnet 命令连接 Memcached 服务器?

通过使用 **telnet hostname portNumber** 命令,您可以使用 telnet 命令连接 Memcached 服务器。

语法

示例

给出的示例显示了如何连接到 Memcached 服务器并执行简单的 set 和 get 命令。假设 Memcached 服务器运行在主机 127.0.0.1 和端口 11211 上。


13) 如何获取键的值?

通过使用 **get** 命令,您可以获取键的值。

语法

示例

在给出的示例中,我们使用 tpointtech 作为键,并以 900 秒的过期时间将其存储为 Memcached。


14) 如何设置键的值?

通过使用 **set** 命令,您可以设置键的值。

语法

示例

在给出的示例中,我们使用 tpointtech 作为键,并以 900 秒的过期时间将其设置为 Memcached 值。


15) 如何向键添加值?

通过使用 **add** 命令,您可以向键添加值。

语法

示例

在给出的示例中,我们使用“key”作为键,并以 900 秒的过期时间将其添加值为 Memcached。


16) 如何替换键的值?

通过使用 **replace** 命令,您可以替换键的值。

语法

示例

在给出的示例中,我们使用“key”作为键,并以 900 秒的过期时间将其添加值为 Memcached。之后,同一个键被替换为“redis”。


17) 如何追加键的值?

通过使用 **append** 命令,您可以追加键的值。

语法

示例

在给出的示例中,我们尝试向不存在的键添加数据。因此,Memcached 返回 NOT_STORED。之后,我们设置一个键并向其中追加数据。


18) 如何预置键的值?

通过使用 **prepend** 命令,您可以预置键的值。

语法

示例

在给出的示例中,我们尝试向不存在的键添加数据。因此,Memcached 返回 NOT_STORED。之后,我们设置一个键并向其中预置数据。


19) 如何删除键?

通过使用 **delete** 命令,您可以删除键。

语法

示例

在给出的示例中,我们使用 tpointtech 作为键,并以 900 秒的过期时间将其存储为 Memcached。之后,它会删除已存储的键。


20) 如何显示统计信息?

通过使用 **stats** 命令,您可以显示统计信息。

语法

示例


21) 如何获取版本信息?

通过使用 **Version** 命令,您可以获取版本信息。


22) 如何关闭连接?

通过使用 **Quit** 命令,您可以关闭连接。


23) 当数据发生变化时,如何更新 Memcached?

当数据发生变化时,有两种方法可以更新 Memcached:

  • **主动清除缓存:**您可以在插入或更新数据时通过清除缓存来更新 Memcached。
  • **重置缓存:**这与第一种方法略有相似,但它不会删除键,而是等待下一次请求来刷新数据,它会在插入或更新后重置值。

24) 什么是 Dogpile 效应?如何防止这种效应?

如果缓存过期,并且网站同时受到来自客户端的大量请求的命中,这种效应称为 Dogpile 效应。

可以通过使用信号量锁来防止这种效应。在该系统中,当值过期时,第一个进程获取锁并开始生成新值。


25) 当服务器意外关机时,存储在 Memcached 中的数据会发生什么?

在 Memcached 中,数据不会永久存储。它不是持久化数据,因此,如果服务器关闭或重新启动,存储在 Memcached 中的所有数据都将被删除。


26) 如果您有多个 Memcache 服务器,而其中一个 Memcache 服务器(包含您的数据)发生故障,它是否还会尝试从那个故障的服务器获取键数据?

故障服务器中的数据不会被删除,但有一个自动故障的机制,可以为多个节点配置。故障转移可以在任何套接字或 Memcached 服务器级别的错误期间触发,而不是在添加现有键等正常客户端错误期间触发。


27) 如何最大限度地减少 Memcached 服务器的停机时间?

以下是最大限度地减少 Memcached 服务器停机时间的方法:

  • 当一个实例失败时,许多实例都会宕机,这种情况会在客户端重新加载丢失的数据时给数据库服务器带来更大的负载。为了避免这种情况,您应该编写代码来最大限度地减少缓存雪崩,它会产生相对较小的影响。
  • 您可以使用丢失机器的 IP 地址在新机器上启动 Memcached 实例。
  • 代码是另一种最小化服务器停机时间的选择,因为它允许您轻松更改 Memcached 服务器列表。
  • 设置超时值是某些 Memcached 客户端为 Memcached 服务器停机时间实现的一种选择。当您的 Memcached 服务器宕机时,客户端将一直尝试发送请求,直到达到超时限制。