在CentOS上设置内存缓存

本节提供了在CentOS上安装内存缓存的说明。 有关详细信息,请参阅memcached wiki

INFO
Adobe建议使用最新的稳定memcached版本(当前为3.1.3 for memcached)。

由于PHP对memcache没有本机支持,因此您必须安装扩展以便PHP使用它。 有两个可用的PHP扩展,请务必解码要使用哪个PHP扩展:

  • memcache (no d) — 不是定期维护的较旧但常用的扩展。
    当前memcache扩展​ 不适用于PHP 7。 ​请参阅有关memcache🔗的PHP文档。

    对于CentOS,确切名称为php-pecl-memcache

  • memcachedd) — 与PHP 7兼容的更新和维护的扩展。 请参阅有关memcached🔗的PHP文档。

    对于CentOS,确切名称为php-pecl-memcached

在CentOS上安装和配置内存缓存

要在CentOS上安装memcached,请以具有root权限的用户身份执行以下任务:

  1. 安装memcached及其依赖项:

    code language-bash
    yum -y update
    
    code language-bash
    yum install -y libevent libevent-devel
    
    code language-bash
    yum install -y memcached
    
    code language-bash
    yum install -y php-pecl-memcache
    
    note info
    INFO
    上述命令的语法可能取决于您使用的程序包资料档案库。 例如,如果您使用webtatic和PHP 5.6,请输入yum install -y php56w-pecl-memcache。 使用yum search memcache|grep php查找相应的包名称。
  2. 更改CACHESIZEOPTIONS的memcached配置设置:

    1. 在文本编辑器中打开/etc/sysconfig/memcached

    2. 找到CACHESIZE的值,并将其更改为至少1 GB。 例如:

      code language-config
      CACHESIZE="1GB"
      
    3. 找到OPTIONS的值,并将其更改为localhost127.0.0.1

  3. 将更改保存到memcached并退出文本编辑器。

  4. 重新启动memcached。

    code language-bash
    service memcached restart
    
  5. 重新启动Web服务器。

    对于Apache:

    code language-bash
    service httpd restart
    
  6. 继续下一部分。

在安装Commerce之前验证memcached的工作原理

Adobe建议测试memcached,以确保它在安装Commerce之前正常工作。 执行此操作只需要几分钟的时间,并且以后可以简化故障排除。

验证Web服务器是否识别memcached

要验证Web服务器是否能够识别memcached:

  1. 在Web服务器的docroot中创建phpinfo.php文件:

    code language-php
    <?php
    // Show all information, defaults to INFO_ALL
    phpinfo();
    
  2. 转到Web浏览器中的该页面。

    例如,http://192.0.2.1/phpinfo.php

  3. 请确保memcache按以下方式显示:

确认Web服务器识别了memcache

验证您是否使用memcached版本3.0.5或更高版本。

如果memcache未显示,请重新启动Web服务器并刷新浏览器页面。 如果仍然不显示,请验证是否已安装php-pecl-memcache扩展。

创建由MySQL数据库和PHP脚本组成的memcache测试

该测试使用MySQL数据库、表和数据来验证是否可以检索数据库数据并将其存储在memcache中。 PHP脚本首先搜索高速缓存。 如果结果不存在,脚本将查询数据库。 在原始数据库完成查询后,脚本使用set命令将结果存储在memcache中。

有关此测试的更多详细信息

创建MySQL数据库:

mysql -u root -p

mysql提示符下,输入以下命令:

create database memcache_test;
GRANT ALL ON memcache_test.* TO memcache_test@localhost IDENTIFIED BY 'memcache_test';
use memcache_test;
create table example (id int, name varchar(30));
insert into example values (1, "new_data");
exit

在Web服务器的docroot中创建cache-test.php

$meminstance = new Memcached();

$meminstance->addServer('<memcached hostname or ip>', <memcached port>);

$query = "select id from example where name = 'new_data'";
$querykey = "KEY" . md5($query);

$result = $meminstance->get($querykey);

if (!$result) {
   try {
        $dbh = new PDO('mysql:host=localhost;dbname=memcache_test','memcache_test','memcache_test');
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $result = $dbh->query("select id from example where name = 'new_data'")->fetch();
        $meminstance->set($querykey, $result, 0, 600);
        print "got result from mysql\n";
        return 0;
    } catch (PDOException $e) {
        die($e->getMessage());
    }
}
print "got result from memcached\n";
return 0;

其中<memcached hostname or ip>localhost127.0.0.1或memcache主机名或IP地址。 <memcached port>是侦听端口;默认情况下,11211

从命令行运行脚本。

cd <web server docroot>
php cache-test.php

第一个结果为got result from mysql。 这意味着memcached中不存在该键,但它是从MySQL中检索的。

第二个结果为got result from memcached,用于验证该值是否成功存储在memcached中。

最后,您可以使用Telnet查看memcache密钥:

telnet localhost <memcache port>

在提示下,输入

stats items

结果类似于以下内容:

STAT items:3:number 1
STAT items:3:age 1075
STAT items:3:evicted 0
STAT items:3:evicted_nonzero 0
STAT items:3:evicted_time 0
STAT items:3:outofmemory 0
STAT items:3:tailrepairs 0

刷新memcache存储并退出Telnet:

flush_all
quit

有关Telnet测试的其他信息

recommendation-more-help
386822bd-e32c-40a8-81c2-ed90ad1e198c