哪个做网站公司,php网站后台模板下载不了,广州网站制作建设,内蒙古住房与城乡建设厅网站前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到网站。
简介
随着您的网站的增长和流量的增加#xff0c;最快显示压力的组件之一是后端数据库。如果您的数据库没有分布式和配置来处理高负载…前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到网站。
简介
随着您的网站的增长和流量的增加最快显示压力的组件之一是后端数据库。如果您的数据库没有分布式和配置来处理高负载它很容易就会被相对较小的流量增加所压倒。
处理这个问题的一种方法是利用内存对象缓存系统比如 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请注意有两个 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在此文件中输入以下内容。这基本上只是调用一个 PHP 函数该函数会收集并以网页友好的布局打印有关我们服务器的信息。
?php
phpinfo();
?现在您可以访问您服务器的域名或公共 IP 地址后面跟着 /info.php您应该会看到一个信息页面。
http://span classhighlightserver_domain_name_or_IP/span/info.php如果您向下滚动或搜索 “memcached” 部分标题您应该会找到类似以下内容的内容
!Memcache PHP info section
这意味着 memcached 扩展已启用并被 Web 服务器找到。
我们还可以通过输入以下命令来检查 memcached 服务是否正在运行
ps aux | grep memcachedmemcache 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 --colorauto memcached您可以通过输入以下命令查询服务的统计信息
echo stats settings | nc localhost 11211如果您需要停止、启动或重新启动 memcached 服务可以通过输入以下类似的命令来执行
sudo service memcached span classhighlightrestart/span测试 Memcached 是否可以缓存数据
现在我们已经验证了 memcached 是否正在运行并且我们的 PHP 扩展是否已启用我们可以尝试让它存储数据。
我们将通过创建另一个 PHP 脚本来实现这一点。这次它将更加复杂。
在我们的文档根目录中打开一个名为 cache_test.php 的文件
sudo nano /var/www/html/cache_test.php在文件中首先创建 PHP 包装标签
lt;?php
?gt;在其中我们将创建一个 PHP Memcached 对象的新实例并将其存储在一个变量中。我们将定义此 PHP 对象可以连接到运行在我们服务器上的实际 memcached 服务的位置。Memcached 默认运行在端口 11211 上
lt;?php
span classhighlight$mem new Memcached();/span
span classhighlight$mem-addServer(127.0.0.1, 11211);/span
?gt;接下来我们将告诉我们的 Memcached 实例从我们的缓存中查询一个键。这个键可以被称为任何东西因为我们还没有创建它。我们将使用 “blah”。此请求的结果将存储在一个 $result 变量中
lt;?php
$mem new Memcached();
$mem-addServer(127.0.0.1, 11211);span classhighlight$result $mem-get(blah);/span
?gt;接下来我们只需要测试是否返回了任何内容。如果 memcached 找到一个名为 “blah” 的键我们希望它打印与该键关联的值。如果 memcached 无法找到匹配的键我们应该打印出一条消息说明情况。
然后我们应该设置一个带有值的键这样下次我们请求该值时memcached 将找到我们给它的值
lt;?php
$mem new Memcached();
$mem-addServer(127.0.0.1, 11211);$result $mem-get(blah);span classhighlightif ($result) {/spanspan classhighlightecho $result;/span
span classhighlight} else {/spanspan classhighlightecho No matching key found. Ill add that now!;/spanspan classhighlight$mem-set(blah, I am data! I am held in memcached!) or die(Couldnt save anything to memcached...);/span
span classhighlight}/span
?gt;此时我们的脚本已经完成。如果我们在 Web 浏览器中访问此页面我们可以看到它是如何工作的
http://span classhighlightserver_domain_name_or_IP/span/cache_test.php您应该最初会看到一个如下的页面
!Memcached uncached message
然而如果我们刷新页面我们应该会看到一个不同的消息
!Memcached cached message
正如您所看到的我们的 memcached 服务现在正在缓存我们的脚本设置的数据。
测试临时缓存数据库值
现在我们已经测试了在 memcached 中存储数据的能力我们可以演示一个更加现实的场景临时缓存数据库查询结果。
在 MySQL 中创建示例数据
首先我们需要在数据库中存储一些信息。
通过以下命令以管理员用户身份连接到 MySQL 实例。您需要输入在安装过程中设置的 MySQL root 密码
mysql -u root -p之后您将进入 MySQL 提示符。
首先我们要创建一个用于测试的数据库。然后选择该数据库
CREATE DATABASE mem_test;
USE mem_test;让我们创建一个名为 test密码为 testing123 的用户并赋予其对我们创建的数据库的访问权限
GRANT ALL ON mem_test.* TO testlocalhost IDENTIFIED BY testing123;现在我们将创建一个非常基本的表并向其中插入一条记录。该表将被命名为 sample_data并且只包含一个索引和一个字符串字段
CREATE TABLE sample_data (id int, name varchar(30));
INSERT INTO sample_data VALUES (1, some_data);现在我们已经创建了结构并插入了数据。我们可以退出 MySQL
exit创建用于缓存 MySQL 数据的 PHP 脚本
现在我们的数据已经存储在 MySQL 中我们可以创建另一个 PHP 脚本其操作方式类似于生产环境中的 PHP 应用程序。
它将在 memcached 中查找数据如果找到数据则返回数据。如果没有找到数据则将从数据库中查询然后将结果存储在 memcached 中以供将来查询使用。
首先在我们的文档根目录中创建另一个 PHP 脚本。我们将这个脚本命名为 database_test.php
sudo nano /var/www/html/database_test.php从我们上一个脚本开始。我们将创建一个 PHP memcached 实例然后告诉它我们服务器上运行的 memcached 服务的位置就像我们上次做的那样
?php
$mem new Memcached();
$mem-addServer(127.0.0.1, 11211);
?接下来与我们上一个脚本有所不同我们需要定义 PHP 如何连接到我们的 MySQL 数据库。我们需要指定我们创建的用户的登录凭据然后告诉它要使用哪个数据库
?php
$mem new Memcached();
$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 变量中。
然后我们将创建一个 $querykey 变量用于存储 memcached 将用来引用我们信息的键。
我们通过使用字符串 “KEY”然后将我们查询的 md5一种哈希方法校验和附加到末尾来创建此键。这将确保如果我们在更大的数据集上使用此技术每个键都是唯一的。它还确保匹配的查询将为后续请求产生相同的键。
?php
$mem new Memcached();
$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 SELECT ID FROM sample_data WHERE name some_data;
$querykey KEY . md5($query);
?接下来我们将创建一个 $result 变量就像我们上一个脚本一样。这将保存我们的 memcached 查询结果就像以前一样。我们要求 memcached 返回我们生成的查询键以查看它是否在其系统中标识了一个记录。
?php
$mem new Memcached();
$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 SELECT name FROM sample_data WHERE id 1;
$querykey KEY . md5($query);$result $mem-get($querykey);
?现在我们准备进行实际的测试逻辑以确定在 memcached 中找到结果时会发生什么。如果找到结果我们希望打印我们提取的数据并告诉用户我们能够直接从 memcached 中检索到它
?php
$mem new Memcached();
$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 SELECT name FROM sample_data WHERE id 1;
$querykey KEY . md5($query);$result $mem-get($querykey);if ($result) {print pData was: . $result[0] . /p;print pCaching success!/ppRetrieved data from memcached!/p;
}
?现在让我们为另一种情况添加逻辑。如果未找到结果我们希望使用我们创建的查询来直接向 MySQL 请求数据。我们将把这个结果存储到我们创建的 $result 变量中这将是一个数组形式的结果。
在获得查询结果后我们需要将该结果添加到 memcached 中以便下次使用。我们可以通过向 memcached 提供我们要用来引用数据的键我们已经使用 $querykey 变量创建了这个键、来自 MySQL 查询的数据本身存储在 $result 变量中以及以秒为单位的缓存数据的时间。
我们将缓存我们的内容 10 秒。在现实世界中缓存内容更长可能更有益。也许如果您的内容不经常更改那么更接近 10 分钟600 秒的时间会更好。对于测试来说较小的值让我们更快地看到发生的事情而无需重新启动我们的 memcached 服务。
之后我们将打印出一个类似的消息与查询结果并告诉用户发生了什么。我们应该将整个块作为前面 if 的 else 添加
?php
$mem new Memcached();
$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 SELECT name FROM sample_data WHERE id 1;
$querykey KEY . md5($query);$result $mem-get($querykey);if ($result) {print pData was: . $result[0] . /p;print pCaching success!/ppRetrieved data from memcached!/p;
} else {$result mysql_fetch_array(mysql_query($query)) or die(mysql_error());$mem-set($querykey, $result, 10);print pData was: . $result[0] . /p;print pData not found in memcached./ppData retrieved from MySQL and stored in memcached for next time./p;
}
?这是我们完成的脚本。它将尝试从 memcached 获取数据并返回它。如果失败它将直接从 MySQL 查询并将结果缓存 10 秒。
测试脚本
现在我们已经编写了脚本可以通过在网页浏览器中转到文件位置来运行它
http://span classhighlightserver_domain_name_or_IP/span/database_test.php第一次访问页面时我们应该看到以下输出
Memcached uncached database query如果我们在上次访问后的 10 秒内刷新页面现在页面应该显示不同的消息
Memcached cached database query如果再等一会儿缓存的内容将会过期并从 memcached 中移除。此时我们可以刷新页面以再次获得第一条消息因为服务器必须重新访问数据库以获取适当的值。
结论
到目前为止您应该已经对 memcached 的工作原理有了相当好的理解以及如何利用它来避免 Web 服务器重复访问数据库以获取相同的内容。
虽然本指南中创建的 PHP 脚本只是示例但它们应该让您对系统的工作原理有了很好的了解。它还应该让您对如何构建代码结构有了很好的理解以便您可以检查 memcached并在必要时返回数据库。