提到Memcached,大家估计很陌生吧,如果你作站群的话,可能会用到wordpress去做,就需要了解下它,可以给我们服务器减少不好压力,如果网站很多的话。接下来,我们一起了解下吧。
Memcached 是驻留在您的托管服务器上的缓存机制之一。它主要处理有助于减少数据库负载导致快速加载网页的数据库查询。如果您的网站/商店严重依赖数据库查询,使用 Memcached 可以让 WordPress 网站显着提高性能并减少页面加载时间。
什么是内存缓存? {#1}
根据 Memcached 官方网站,Memcached 是一个:
"免费和开源、高性能、分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态 Web 应用程序。
Memcached 是一种内存键值存储,用于存储来自数据库调用、API 调用或页面渲染结果的任意小块数据(字符串、对象)。"
简单来说,Memcached 是一个分布式临时对象缓存系统,它将字符串和对象存储在服务器的内存中,这些对象是处理数据库查询、API 调用或页面渲染产生的。用于此机制的服务器可以称为 Memcached 服务器。
Memcached 有什么用? {#2}
Memcached 用于通过减少数据库负载来加速动态 Web 应用程序,如电子商务商店、注册/登录网站等。它存储处理后的结果,因此每当访问者再次请求相同的查询时,Memcached 可以响应该查询而不是处理查询和回复。通过保持服务器不那么繁忙,您的访问者将体验到更快的加载时间和更好的用户体验。
Memcached 是如何工作的? {#3}
每次访问者/浏览器请求需要数据库处理和响应的服务器时,都会给服务器增加负载。Memcached 通过将数据对象存储在临时动态内存中来减少负载。它将数据保存在键值上并在将浏览器的请求发送到数据库之前检查其内存。如果存在缓存,它会在不涉及要处理的数据库的情况下回复请求。
如上所述,Memcached 是一个分布式内存对象缓存系统,由四个主要组件组成:
-
客户端软件:接收分布式可用 Memcached 服务器的列表。
-
基于客户端的哈希算法:根据键值选择服务器。
-
服务器软件:将数据(值)和键存储到内部哈希表中。
-
服务器算法:确定何时删除旧数据并重用内存。
上述组件允许 Memcached 存储和检索数据。每个项目包括一个:
-
键值
-
到期时间
-
原始数据
当一个项目被请求时,Memcached 会在回复请求之前验证它的过期时间以查看该项目是否仍然有效。如果缓存不存在,它会将请求发送到数据库以处理结果并将结果存储为一个项目。如果服务器内存不足,它会查找并替换过期的项目。如果它仍然需要任何信息,它会查找特定时间段内未请求的项目。通过这种方式,Memcached 将更多最近请求的信息保存在动态内存中。
高级 Memcached 工作如下:
-
Memcached 检查请求的数据是否存储在缓存中。
-
两种可能的输出:-- 数据存储在缓存中:在不中断数据库的情况下从 Memcached 返回请求的数据。-- 数据不存储在缓存中:执行请求的查询,处理和检索数据,并将结果保存在内存中。
-
每当项目有更新或项目过期时,Memcached 都会更新其缓存并确保将新鲜内容传送到请求的客户端。
如何使用 Memcached? {#4}
使用 Memcached 涉及两个步骤。首先,它必须安装在您的托管服务器上,然后您的应用程序应该能够支持 Memcached。
在服务器上安装 Memcached {#5}
Memcached 不需要很多 CPU 资源。它完全依赖于内存。如果您有 8GB 内存的 Web 服务器,但操作系统和您的网站仅消耗 4GB,那么最好将剩余的内存分配给 Memcached 实例以增加其存储容量。 在此处阅读所有技术要求。
Memcached 适用于大多数基于 Linux 的服务器,安装 Memcached 只需两个 Linux 命令即可。通常,您应该从操作系统(Debian、Ubuntu 等)提供的软件包中安装 Memcached。操作系统将为您解决依赖关系并负责安全更新。
对于 Debian 或 Ubuntu 用户:
命令:apt-get install memcached
对于 Redhat/Fedora:
命令:yum install memcached
有关更多信息,请参阅您各自操作系统的文档。值得一提的是,最流行的反向代理服务器之一 Nginx 预装了 Memcached 模块,提供了最灵活的 Nginx Memcached 捆绑解决方案。
注:如果是宝塔用户,可以直接在软件商店中,进入 PHP 的设置选项,在【安装扩展】选项卡进入安装即可:
检查 Memcached 是否正在运行 {#6}
有多种方法可以测试 Memcached 是否正在运行。其中之一是使用 Telnet,登录到您的服务器 SSH 终端并编写以下命令:
telnet localhost 11211
或者
telnet 127.0.0.1 11211
PS:如果本地服务器是您的 Memcached 服务器,则会运行上述命令。
如果上面的命令运行成功,你会得到以下结果:
Connected to localhost.
Escape character is '^]'.
否则会出现连接错误。
要检查一些基本统计信息,您可以使用以下命令:stats
你会得到如下内容:
STAT pid 313
STAT uptime 2778636
STAT time 1535727399
STAT version 1.4.21
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 47.119322
STAT rusage_system 48.765342
STAT curr_connections 1
STAT total_connections 151198
STAT connection_structures 3
STAT reserved_fds 20
STAT cmd_get 46
STAT cmd_set 4
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 30
STAT get_misses 16
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 22942
STAT bytes_written 3433252
STAT limit_maxbytes 268435456
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 106
STAT curr_items 1
STAT total_items 4
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT lrutail_reflocked 0
要检查项目,请使用:stats items
结果:
STAT items:2:number 1
STAT items:2:age 2486
STAT items:2:evicted 0
STAT items:2:evicted_nonzero 0
STAT items:2:evicted_time 0
STAT items:2:outofmemory 0
STAT items:2:tailrepairs 0
STAT items:2:reclaimed 0
STAT items:2:expired_unfetched 0
STAT items:2:evicted_unfetched 0
STAT items:2:crawler_reclaimed 0
STAT items:2:lrutail_reflocked 0
要检查当前内存统计信息,请写入: stats slices
结果:
STAT 2:chunk_size 120
STAT 2:chunks_per_page 8738
STAT 2:total_pages 1
STAT 2:total_chunks 8738
STAT 2:used_chunks 1
STAT 2:free_chunks 8737
STAT 2:free_chunks_end 0
STAT 2:mem_requested 106
STAT 2:get_hits 30
STAT 2:cmd_set 4
STAT 2:delete_hits 0
STAT 2:incr_hits 0
STAT 2:decr_hits 0
STAT 2:cas_hits 0
STAT 2:cas_badval 0
STAT 2:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048560
要退出连接类型输入 quit
并按回车键 enter。
在您的 WordPress 站点上集成 Memcached
正如前面所提到的,首先确保你的服务器已经安装并启用 Memcached 组件,然后才能通过插件来集成到 WordPress。在这里,我们介绍集成了 Memcached 功能开关的 W3 Total Cache 插件的设置,以及仅仅用于启用 Memcached 的 Use Memcached 插件的方式。二者选其一即可。
W3 Total Cache 插件
市场上有很多WordPress 缓存插件 可用。它们中的大多数都像 W3 Total Cache 一样支持 Memcached,它是使用最广泛的缓存插件之一,允许您配置 Memcached。如果您是 W3 Total Cache 用户,请导航到"常规设置"选项卡并从下拉列表中选择 Memcached,其中显示:
-
页面缓存
-
缩小缓存
-
数据库缓存
保存所有设置,不要忘记清除一次缓存。
Use Memcached 插件
在进行搜索时,我们发现了一个名为Use Memcached的相对较新的对象缓存插件,因此我们决定对其进行测试。
如果您在服务器上使用具有默认值的 Memcached 服务,即主机 127.0.0.1 (localhost) 和端口 11211,那么您不需要配置任何东西。
第 1 步:安装 Use Memcached 插件
只需转到您的 WordPress 仪表板,然后从左侧边栏中转到插件 > 安装插件并搜索 Use Memcached 插件。点击安装,然后点击激活。
第 2 步:启用 Memcached
安装插件后,转到工具 > Use Memcached ,您应该会看到启用 Memcached 集成的选项
单击启用 Memcached 后,应在您的站点上启用对象缓存。
WP-CLI 集成
这个 Use Memcached 插件最好的地方之一是它与 WP-CLI 集成,我们可以使用wp memcache <command>处理插件。
子命令
wp memcache flush -> Flush memcache
wp memcache stats -> Memcache stats
定义 WP_CACHE_KEY_SALT 以避免缓存冲突
如果您要在同一台服务器上托管的多个站点上集成 Memcached,那么请确保您在 wp-config.php 中定义了WP_CACHE_KEY_SALT这一步对于避免同一服务器上多个站点之间的缓存冲突非常关键,只需复制粘贴下面的代码在你的 wp-config.php
define ('WP_CACHE_KEY_SALT', 'yourdomain.com');
请记住将yourdomain.com替换为您自己的站点 URL。添加代码后,请确保清除您网站上的缓存以确保一切正常。
同个服务器多个 WordPress 网站怎么同时使用 Memcached
同个服务器多个 WordPress 同时使用 Memcached 会引起数据问题
如果同时将 object-cache.php 文件复制到 wp-content 目录下来同时开启 Memcached 缓存,可能会出现这样的问题:访问一个网站会跳转到另外一个网站,数据会串了。
这是怎么回事呢?这是因为 object-cache.php 是使用 WordPress 的表前缀($table_prefix)来区分不同站点在内存中的缓存的。如果你在同个服务器多个 WordPress 网站的表前缀都相同,都是默认的 wp_,那么 object-cache.php 就无法区分是哪个站点了。
那么怎么解决呢?
同个服务器多个 WordPress 怎么同时使用 Memcached
知道了问题,那么就非常好解决,有两个解决方法:
-
修改表前缀,让不同的 WordPress 博客使用不同的表前缀。
-
如果修改表前缀不方便,我还提供了 WP_CACHE_KEY_SALT 这个缓存 key 盐值的常量,你只需要在不同站点的 wp-config.php 文件定义不同的 WP_CACHE_KEY_SALT 值即可。
比如两个站点分别定义为:
define('WP_CACHE_KEY_SALT', 'site1');
define('WP_CACHE_KEY_SALT', 'site2');
如果设置了还不行,可能你的 object-cache.php 不是最新版,那就下载一下最新版的 object-cache.php 文件复制到 wp-content 目录下。
总结 {#9}
Memcached 被认为是加速 WordPress 站点的方法之一, 如果配置正确,因为它减少了数据库负载并保持服务器不那么繁忙,从而获得更好的性能和页面加载时间。
在本教程中,您已经成功地学习了如何将 Memcached 集成为您的 WordPress 站点的对象缓存,请在评论部分告诉我们本指南是否对您有用。