在Ubuntu 14.04上安装和使用Memcache的方法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在Ubuntu 14.04上安装和使用Memcache的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介
随着您的网站的增长和流量的增加,最快显示压力的组件之一是后端数据库。如果您的数据库没有分布式和配置来处理高负载,它很容易就会被相对较小的流量增加所压倒。

处理这个问题的一种方法是利用内存对象缓存系统,比如 memcached。Memcached 是一种缓存系统,通过临时将通常从数据库中检索的信息存储在内存中。然后对内存中的信息的下一个请求将变得非常快,而不会给后端数据库带来压力。

在本指南中,我们将讨论如何在 Ubuntu 14.04 服务器上安装和使用 memcached。

先决条件
在开始之前,您应该在服务器上拥有一个常规的非根用户,该用户具有 sudo 权限。如果您还没有创建这样的用户,可以按照我们的 Ubuntu 14.04 初始设置指南中的步骤 1-4 进行创建。

当您配置好常规用户后,可以继续进行本指南。

安装 Memcached 和相关组件
要开始,我们应该从 Ubuntu 的存储库中获取我们需要的所有组件。幸运的是,我们需要的一切都是可用的。

由于这是我们在本次会话中使用 apt 的第一个操作,我们应该更新本地软件包索引。然后我们可以安装我们的程序。

我们将安装 memcached 以及一个 MySQL 数据库后端和 PHP 来处理交互。我们还将安装处理 memcached 交互的 PHP 扩展。您可以通过输入以下命令获取所需的所有内容:

sudo apt-get update
sudo apt-get install mysql-server php5-mysql php5 php5-memcached memcached
1
2
请注意,有两个 PHP memcache 扩展可用。一个称为 php5-memcache,另一个称为 php5-memcached(请注意第二个示例末尾的 “d”)。我们使用后者,因为它是稳定的并实现了更广泛的功能范围。

如果您还没有安装 MySQL,安装过程将提示您选择并确认管理员密码。

这应该安装并配置您所需的一切。

检查安装
信不信由你,memcached 已经完全安装并准备就绪。我们可以通过多种方式来测试这一点。

第一种方式非常简单。我们可以询问 PHP 是否知道我们的 memcached 扩展以及它是否已启用。我们可以通过创建普遍存在的 PHP 信息页面来实现这一点。

这很容易通过在我们的文档根目录中创建一个名为 info.php 的文件来实现。在 Ubuntu 14.04 上的 Apache 中,我们的默认文档根目录是 /var/www/html。以 root 权限在此处打开文件:

sudo nano /var/www/html/info.php
1
在此文件中,输入以下内容。这基本上只是调用一个 PHP 函数,该函数会收集并以网页友好的布局打印有关我们服务器的信息。

<?php
phpinfo();
?>
1
2
3
现在,您可以访问您服务器的域名或公共 IP 地址,后面跟着 /info.php,您应该会看到一个信息页面。

http://server_domain_name_or_IP/info.php
1
如果您向下滚动或搜索 “memcached” 部分标题,您应该会找到类似以下内容的内容:

!Memcache PHP info section

这意味着 memcached 扩展已启用并被 Web 服务器找到。

我们还可以通过输入以下命令来检查 memcached 服务是否正在运行:

ps aux | grep memcached
1
memcache 6584 0.0 0.0 327448 3004 ? Sl 14:07 0:00 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
demouser 6636 0.0 0.0 11744 904 pts/0 S+ 14:29 0:00 grep --color=auto memcached
1
2
您可以通过输入以下命令查询服务的统计信息:

echo "stats settings" | nc localhost 11211
1
如果您需要停止、启动或重新启动 memcached 服务,可以通过输入以下类似的命令来执行:

sudo service memcached restart
1
测试 Memcached 是否可以缓存数据
现在我们已经验证了 memcached 是否正在运行,并且我们的 PHP 扩展是否已启用,我们可以尝试让它存储数据。

我们将通过创建另一个 PHP 脚本来实现这一点。这次,它将更加复杂。

在我们的文档根目录中打开一个名为 cache_test.php 的文件:

sudo nano /var/www/html/cache_test.php
1
在文件中,首先创建 PHP 包装标签:

<?php
?>
1
2
在其中,我们将创建一个 PHP Memcached 对象的新实例,并将其存储在一个变量中。我们将定义此 PHP 对象可以连接到运行在我们服务器上的实际 memcached 服务的位置。Memcached 默认运行在端口 11211 上:

<?php
$mem = new Memcached();
$mem->addServer("127.0.0.1", 11211);
?>
1
2
3
4
接下来,我们将告诉我们的 Memcached 实例从我们的缓存中查询一个键。这个键可以被称为任何东西,因为我们还没有创建它。我们将使用 “blah”。此请求的结果将存储在一个 $result 变量中:

<?php
mem=newMemcached();mem->addServer("127.0.0.1", 11211);

result=mem->get("blah");
?>
1
2
3
4
5
6
接下来,我们只需要测试是否返回了任何内容。如果 memcached 找到一个名为 “blah” 的键,我们希望它打印与该键关联的值。如果 memcached 无法找到匹配的键,我们应该打印出一条消息说明情况。

然后,我们应该设置一个带有值的键,这样下次我们请求该值时,memcached 将找到我们给它的值:

<?php
mem=newMemcached();mem->addServer("127.0.0.1", 11211);

result=mem->get("blah");

if ($result) {
echo $result;
} else {
echo "No matching key found. I'll add that now!";
$mem->set("blah", "I am data! I am held in memcached!") or die("Couldn't save anything to memcached...");
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
此时,我们的脚本已经完成。如果我们在 Web 浏览器中访问此页面,我们可以看到它是如何工作的:

http://server_domain_name_or_IP/cache_test.php
1
您应该最初会看到一个如下的页面:

!Memcached uncached message

然而,如果我们刷新页面,我们应该会看到一个不同的消息:

!Memcached cached message

正如您所看到的,我们的 memcached 服务现在正在缓存我们的脚本设置的数据。

测试临时缓存数据库值
现在我们已经测试了在 memcached 中存储数据的能力,我们可以演示一个更加现实的场景:临时缓存数据库查询结果。

在 MySQL 中创建示例数据
首先,我们需要在数据库中存储一些信息。

通过以下命令以管理员用户身份连接到 MySQL 实例。您需要输入在安装过程中设置的 MySQL root 密码:

mysql -u root -p
1
之后,您将进入 MySQL 提示符。

首先,我们要创建一个用于测试的数据库。然后选择该数据库:

CREATE DATABASE mem_test;
USE mem_test;
1
2
让我们创建一个名为 test,密码为 testing123 的用户,并赋予其对我们创建的数据库的访问权限:

GRANT ALL ON mem_test.* TO test@localhost IDENTIFIED BY 'testing123';
1
现在,我们将创建一个非常基本的表,并向其中插入一条记录。该表将被命名为 sample_data,并且只包含一个索引和一个字符串字段:

CREATE TABLE sample_data (id int, name varchar(30));
INSERT INTO sample_data VALUES (1, "some_data");
1
2
现在,我们已经创建了结构并插入了数据。我们可以退出 MySQL:

exit
1
创建用于缓存 MySQL 数据的 PHP 脚本
现在我们的数据已经存储在 MySQL 中,我们可以创建另一个 PHP 脚本,其操作方式类似于生产环境中的 PHP 应用程序。

它将在 memcached 中查找数据,如果找到数据,则返回数据。如果没有找到数据,则将从数据库中查询,然后将结果存储在 memcached 中以供将来查询使用。

首先,在我们的文档根目录中创建另一个 PHP 脚本。我们将这个脚本命名为 database_test.php:

sudo nano /var/www/html/database_test.php
1
从我们上一个脚本开始。我们将创建一个 PHP memcached 实例,然后告诉它我们服务器上运行的 memcached 服务的位置,就像我们上次做的那样:

<?php
mem=newMemcached();mem->addServer("127.0.0.1", 11211);
?>
1
2
3
4
接下来,与我们上一个脚本有所不同,我们需要定义 PHP 如何连接到我们的 MySQL 数据库。我们需要指定我们创建的用户的登录凭据,然后告诉它要使用哪个数据库:

<?php
mem=newMemcached();mem->addServer("127.0.0.1", 11211);

mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("mem_test") or die(mysql_error());
?>
1
2
3
4
5
6
7
接下来,我们需要设计查询,以获取我们插入到表中的数据。我们将把这个查询存储到一个 $query 变量中。

然后,我们将创建一个 $querykey 变量,用于存储 memcached 将用来引用我们信息的键。

我们通过使用字符串 “KEY”,然后将我们查询的 md5(一种哈希方法)校验和附加到末尾来创建此键。这将确保如果我们在更大的数据集上使用此技术,每个键都是唯一的。它还确保匹配的查询将为后续请求产生相同的键。

<?php
mem=newMemcached();mem->addServer("127.0.0.1", 11211);

mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("mem_test") or die(mysql_error());

query="SELECTIDFROMsampledataWHEREname=somedata";querykey = "KEY" . md5(query);?>12345678910result 变量,就像我们上一个脚本一样。这将保存我们的 memcached 查询结果,就像以前一样。我们要求 memcached 返回我们生成的查询键,以查看它是否在其系统中标识了一个记录。

<?php
mem=newMemcached();mem->addServer("127.0.0.1", 11211);

mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("mem_test") or die(mysql_error());

query="SELECTnameFROMsampledataWHEREid=1";querykey = "KEY" . md5($query);

result=mem->get($querykey);
?>
1
2
3
4
5
6
7
8
9
10
11
12
现在,我们准备进行实际的测试逻辑,以确定在 memcached 中找到结果时会发生什么。如果找到结果,我们希望打印我们提取的数据,并告诉用户我们能够直接从 memcached 中检索到它:

<?php
mem=newMemcached();mem->addServer("127.0.0.1", 11211);

mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("mem_test") or die(mysql_error());

query="SELECTnameFROMsampledataWHEREid=1";querykey = "KEY" . md5($query);

result=mem->get($querykey);

if ($result) {
print "

Data was: " . $result[0] . "

";
print "

Caching success!

Retrieved data from memcached!

";
}
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
现在,让我们为另一种情况添加逻辑。如果未找到结果,我们希望使用我们创建的查询来直接向 MySQL 请求数据。我们将把这个结果存储到我们创建的 $result 变量中,这将是一个数组形式的结果。

在获得查询结果后,我们需要将该结果添加到 memcached 中,以便下次使用。我们可以通过向 memcached 提供我们要用来引用数据的键(我们已经使用 querykeyMySQLresult 变量中),以及以秒为单位的缓存数据的时间。

我们将缓存我们的内容 10 秒。在现实世界中,缓存内容更长可能更有益。也许如果您的内容不经常更改,那么更接近 10 分钟(600 秒)的时间会更好。对于测试来说,较小的值让我们更快地看到发生的事情,而无需重新启动我们的 memcached 服务。

之后,我们将打印出一个类似的消息与查询结果,并告诉用户发生了什么。我们应该将整个块作为前面 if 的 else 添加:

<?php
mem=newMemcached();mem->addServer("127.0.0.1", 11211);

mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("mem_test") or die(mysql_error());

query="SELECTnameFROMsampledataWHEREid=1";querykey = "KEY" . md5($query);

result=mem->get($querykey);

if ($result) {
print "

Data was: " . $result[0] . "

";
print "

Caching success!

Retrieved data from memcached!

";
} else {
result=mysqlfetcharray(mysqlquery(query)) or die(mysql_error());
mem>set(querykey, $result, 10);
print "

Data was: " . $result[0] . "

";
print "

Data not found in memcached.

Data retrieved from MySQL and stored in memcached for next time.

";
}
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
这是我们完成的脚本。它将尝试从 memcached 获取数据并返回它。如果失败,它将直接从 MySQL 查询并将结果缓存 10 秒。

测试脚本
现在我们已经编写了脚本,可以通过在网页浏览器中转到文件位置来运行它:

http://server_domain_name_or_IP/database_test.php
1
第一次访问页面时,我们应该看到以下输出:

Memcached uncached database query
1
如果我们在上次访问后的 10 秒内刷新页面,现在页面应该显示不同的消息:

Memcached cached database query
1
如果再等一会儿,缓存的内容将会过期并从 memcached 中移除。此时我们可以刷新页面以再次获得第一条消息,因为服务器必须重新访问数据库以获取适当的值。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
1
0
0
120
分享
相关文章
|
7天前
|
在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境的指南。
完成以上步骤后,您将在Ubuntu 18.04系统上成功安装并配置了Eclipse IDE,它将与JDK 8兼容,可以开始进行Java开发工作。如果遇到任何问题,请确保每一步骤都正确执行,并检查是否所有路径都与您的具体情况相匹配。
36 11
Kubernetes安装详细教程 Ubuntu版
本教程基于Ubuntu 22.04配置Kubernetes环境,涵盖依赖安装、swap关闭、内核参数调整、containerd与Kubernetes组件安装、集群初始化及CNI网络插件部署等内容,并提供常见问题处理方法和相关工具推荐。
Ubuntu 安装 docker
本文介绍了在 Ubuntu 系统上安装 Docker 的详细步骤,包括卸载旧版本、设置 Docker 官方存储库、安装 Docker 包以及配置镜像源加速。首先通过移除旧版组件如 `docker.io` 和 `docker-compose` 等进行清理,然后添加官方 GPG 密钥并配置 APT 源,接着安装最新 Docker 组件。此外,还提供了阿里云和 1Panel 的镜像源配置方法以提升下载速度,并通过运行 `hello-world` 镜像测试安装是否成功。
919 3
Ubuntu 安装 docker
Loam在Ubuntu 18.04上的一站式安装指南
现在,你已经完成了Loam在Ubuntu 18.04上的一站式安装盛宴。从更新系统清洁,到搭建魔法环境的工作空间,再到召唤和激活Loam精髓的艺术——每步都妙不可言,每步都至关重要,让你在这场技术的饕餮盛宴中大显身手。
50 8
|
1月前
|
Linux环境下VSCode快速安装终极指南:debian/ubuntu/linux平台通用
以上就是在Linux环境下安装VSCode的终极指南,抛开繁复的专业词汇,以平易近人的文字、形象生动的比喻让你轻松学会这一过程。别忘了,你的小伙伴VSCode已经在应用菜单里等你了!
350 23
Windows中安装WSL 2和Ubuntu系统的教程
回看这一路,有趣吧?你已经跨界成为了一个Windows和Linux的桥梁。期待在代码的世界里,把一切玩得风生水起!
66 13
Ubuntu环境下以源码编译方式安装Vim的步骤介绍
以上就是在Ubuntu环境下以源码编译方式安装Vim的全部步骤。就像煮一杯咖啡,虽然过程中需要耐心和一些技巧,但等到你熟悉之后,你会发现,不仅可以定制自己喜欢的口味,过程中的乐趣也是不能忽视的。希望你在编译安装Vim的过程中,能体验到这份乐趣。
130 21
在Ubuntu 20.04系统中安装SLAM库的具体操作步骤
以上是在Ubuntu 20.04系统中安装SLAM库的具体操作步骤。就像积木游戏,需要按照正确的步骤,适时地添加正确的部件,才能够构建出我们想要的积木模型。在现实操作中可能会遇到各种问题,就像积木构建中的各种困难,我们要有耐心和决心去解决它们,最后得到我们想要的结果。希望这个有趣的积木游戏比方能帮助你更好地理解SLAM库的安装过程,并在实际操作中得到应用。
98 34
在Jetson TX2的Ubuntu18.04系统中安装ROS的教程
所有这些步骤并不复杂,但确实需要仔细一点。如果遇到问题,不要灰心,问题是解决问题的开始。保持耐心,细心阅读错误信息,通常情况下,问题的答案就藏在其中。祝ROS旅程顺利!
94 18
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问