本教程适用于以下操作系统版本

  • Ubuntu 24.04 (Noble Numbat)
  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 20.04 (Focal Fossa)
  • Ubuntu 18.04 (Bionic Beaver)

本页内容

  • 环境要求
  • 在 Ubuntu 22.04 上安装 Memcached
  • 安装 PHP Memcached 扩展
  • 通过身份验证保护 Memcached
  • 验证 Memcached 身份验证
  • 为 Python 安装 Memcached
  • 结语

Memcached 是一个免费、开源且通用的分布式内存缓存系统,用于缓存数据库数据。它是一个高性能的内存缓存系统,通过减轻数据库负载来加速动态 Web 应用程序。Memcached 由四个组件构成,使客户端和服务器能够协同工作,尽可能高效地提供缓存数据。它为 PHP、Java、C/C++、Python、Ruby、Perl 等所有主流语言提供 API 集成。

本教程将向你展示如何在 Ubuntu 22.04 服务器上安装 Memcached 服务器,以及如何在 PHP 中使用它。

环境要求

  • 一台运行 Ubuntu 22.04 的服务器。
  • 服务器上已配置 root 密码。

在 Ubuntu 22.04 上安装 Memcached

默认情况下,Memcached 软件包已包含在 Ubuntu 默认仓库中。你可以使用以下命令轻松安装:

apt install memcached libmemcached-tools -y

Memcached 安装完成后,使用以下命令启动 Memcached 服务:

systemctl start memcached

你可以使用以下命令检查 Memcached 的状态:

systemctl status memcached

你应该会看到类似以下输出:

? memcached.service - memcached daemon
     Loaded: loaded (/lib/systemd/system/memcached.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-10-18 13:09:47 UTC; 29s ago
       Docs: man:memcached(1)
   Main PID: 5525 (memcached)
      Tasks: 10 (limit: 2242)
     Memory: 1.7M
        CPU: 71ms
     CGroup: /system.slice/memcached.service
             ??5525 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 -P /var/run/memcached/memcached.pid

Oct 18 13:09:47 ubuntu2204 systemd[1]: Started memcached daemon.

要验证 Memcached 版本,请运行以下命令:

memcached -V

你将看到类似以下输出:

memcached 1.6.14

默认情况下,Memcached 监听 11211 端口。你可以使用以下命令验证:

ss -plunt | grep memcache

你应该会看到类似以下输出:

tcp   LISTEN 0      1024                        127.0.0.1:11211      0.0.0.0:*    users:(("memcached",pid=5525,fd=22)) 

安装 PHP Memcached 扩展

为了在基于 PHP 的应用程序中使用 Memcached,你需要为服务器安装 PHP Memcached 扩展。你可以使用以下命令配合 Apache 进行安装:

apt install apache2 php libapache2-mod-php php-memcached php-cli -y

接下来,创建一个示例 PHP 测试页面来验证 Memcached:

nano /var/www/html/info.php

添加以下代码:

<?php
phpinfo();

保存并关闭文件,然后重启 Apache 服务以使更改生效:

systemctl restart apache2

接下来,打开你的 Web 浏览器,使用 URL http://your-server-ip/info.php 访问该 PHP 页面。你应该在以下屏幕上看到 Memcached:

在 Ubuntu 22.04 系统上安装并配置 Memcached 内存缓存服务

接下来,创建另一个 PHP 测试页面,以验证 Memcached 是否正常工作。

nano /var/www/html/test.php

添加以下代码:

<?php

try

{
$memcached = new Memcached();
$memcached->addServer("127.0.0.1", 11211); 
$response = $memcached->get("key_cache");

if($response==true) 
{
echo "Result coming from caching";
echo $response;
}

else

{
echo "Cache is not created yet, reload again to see changes";
$memcached->set("key_cache", "Hooray! Memcache is working now ...") ;
}
}
catch (exception $e)
{
echo $e->getMessage();
}
?>

保存并关闭文件,然后打开你的 Web 浏览器,使用 URL http://your-server-ip/test.php 访问该 PHP 测试页面。你应该会看到类似以下屏幕:

在 Ubuntu 22.04 系统上安装并配置 Memcached 内存缓存服务

接下来,再次重新加载页面。这一次页面将从缓存内存中加载,如下所示:

在 Ubuntu 22.04 系统上安装并配置 Memcached 内存缓存服务

通过身份验证保护 Memcached

建议使用简单认证与安全层(SASL)通过基于用户的身份验证来保护 Memcached。为此,你需要在服务器上安装 sasl2-bin 软件包。

apt install sasl2-bin

接下来,为 SASL 身份验证创建一个目录和配置文件:

mkdir -p /etc/sasl2
nano /etc/sasl2/memcached.conf

添加以下行:

log_level: 5
mech_list: plain
sasldb_path: /etc/sasl2/memcached-sasldb2

保存并关闭文件,然后创建一个带有用户凭据的 SASL 数据库:

saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 user1

如下所示设置你的密码:

Password: 
Again (for verification): 

接下来,更改 Memcached 数据库的所有权:

chown memcache:memcache /etc/sasl2/memcached-sasldb2

接下来,使用以下命令验证 Memcached:

memcstat --servers="127.0.0.1"

你应该会看到类似以下输出:

Server: 127.0.0.1 (11211)
	 pid: 5525
	 uptime: 462
	 time: 1666099048
	 version: 1.6.14
	 libevent: 2.1.12-stable
	 pointer_size: 64
	 rusage_user: 0.110123
	 rusage_system: 0.093906
	 max_connections: 1024
	 curr_connections: 1
	 total_connections: 4
	 rejected_connections: 0
	 connection_structures: 2
	 response_obj_oom: 0
	 response_obj_count: 1
	 response_obj_bytes: 49152
	 read_buf_count: 6
	 read_buf_bytes: 98304
	 read_buf_bytes_free: 32768
	 read_buf_oom: 0
	 reserved_fds: 20
	 cmd_get: 2
	 cmd_set: 1
	 cmd_flush: 0
	 cmd_touch: 0
	 cmd_meta: 0
	 get_hits: 1
	 get_misses: 1
	 get_expired: 0
	 get_flushed: 0
	 delete_misses: 0

接下来,编辑 Memcached 配置文件:

nano /etc/memcached.conf

添加以下行:

-S
-vv

保存并关闭文件,然后重启 Memcached 服务以使更改生效:

systemctl restart memcached

接下来,使用以下命令验证 SASL 支持:

journalctl -u memcached |grep SASL

如果一切正常,你将看到类似以下输出:

Journal file /var/log/journal/d97e195db6584d63aeedfdc35dc83c7f/user-1000.journal is truncated, ignoring file.
Oct 18 13:18:19 ubuntu2204 systemd-memcached-wrapper[14980]: Initialized SASL.

验证 Memcached 身份验证

首先,尝试在不进行身份验证的情况下再次检查与 Memcached 的连接:

memcstat --servers="127.0.0.1"

该命令不应产生任何输出。输入以下 shell 命令以检查其状态:

echo $?

你应该收到以下状态码,表示 memcstat 命令执行失败。

1

接下来,通过指定用户名和密码再次运行 Memcached 命令:

memcstat --servers="127.0.0.1" --username=user1 --password=password

你将看到类似以下输出:

Server: 127.0.0.1 (11211)
	 pid: 14980
	 uptime: 46
	 time: 1666099143
	 version: 1.6.14
	 libevent: 2.1.12-stable
	 pointer_size: 64
	 rusage_user: 0.077843
	 rusage_system: 0.049072
	 max_connections: 1024
	 curr_connections: 1
	 total_connections: 3
	 rejected_connections: 0
	 connection_structures: 2
	 response_obj_oom: 0
	 response_obj_count: 1
	 response_obj_bytes: 16384
	 read_buf_count: 3
	 read_buf_bytes: 49152
	 read_buf_bytes_free: 16384
	 read_buf_oom: 0

为 Python 安装 Memcached

如果你想将 Memcached 与基于 Python 的 Web 应用程序集成,那么你需要为 Python 安装 Memcached 扩展。你可以使用以下命令安装:

apt install python3-pip
pip install pymemcache
pip install python-memcached

结语

在本文中,我们介绍了如何在 Ubuntu 22.04 上安装 Memcached 服务器,还介绍了如何通过基于 SASL 的身份验证来保护 Memcached。希望你现在能够将 Memcached 与你的应用程序集成,以提升应用程序性能。如果你有任何疑问,欢迎向我提问。