Set up memcached on CentOS

This section provides instructions to install memcached on CentOS. For additional information, consult the memcached wiki.

INFO
Adobe recommends using the latest stable memcached version (currently 3.1.3 for memcached).

Because PHP has no native support for memcache, you must install an extension for PHP to use it. There are two PHP extensions available and it is important to decode which to use:

  • memcache (no d)—an older but popular extension that is not maintained regularly.
    The memcache extension currently does not work with PHP 7. See PHP documentation for memcache.

    The exact name is php-pecl-memcache for CentOS.

  • memcached (with a d)—a newer and maintained extension that is compatible with PHP 7. See PHP documentation for memcached.

    The exact name is php-pecl-memcached for CentOS.

Install and configure memcached on CentOS

To install memcached on CentOS, perform the following tasks as a user with root privileges:

  1. Install memcached and its dependencies:

    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
    The syntax of the preceding commands might depend on what package repositories you use. For example, if you use webtatic and PHP 5.6, enter yum install -y php56w-pecl-memcache. Use yum search memcache|grep php to find the appropriate package name.
  2. Change the memcached configuration setting for CACHESIZE and OPTIONS:

    1. Open /etc/sysconfig/memcached in a text editor.

    2. Locate the value for CACHESIZE and change it to at least 1 GB. For example:

      code language-config
      CACHESIZE="1GB"
      
    3. Locate the value for OPTIONS and change it to localhost or 127.0.0.1

  3. Save your changes to memcached and exit the text editor.

  4. Restart memcached.

    code language-bash
    service memcached restart
    
  5. Restart your web server.

    For Apache:

    code language-bash
    service httpd restart
    
  6. Continue with the next section.

Verify memcached works before installing Commerce

Adobe recommends testing memcached to make sure it works before you install Commerce. Doing so takes only a few minutes and can simplify troubleshooting later.

Verify memcached is recognized by the web server

To verify memcached is recognized by the web server:

  1. Create a phpinfo.php file in the web server’s docroot:

    code language-php
    <?php
    // Show all information, defaults to INFO_ALL
    phpinfo();
    
  2. Go to that page in your web browser.

    For example, http://192.0.2.1/phpinfo.php

  3. Make sure memcache displays as follows:

Confirm memcache is recognized by the web server

Verify you are using memcached version 3.0.5 or later.

If memcache does not display, restart the web server and refresh the browser page. If it still does not display, verify you installed the php-pecl-memcache extension.

Create a memcache test consisting of a MySQL database and PHP script

The test uses a MySQL database, table, and data to verify you can retrieve the database data and store it in memcache. A PHP script first searches the cache. If the result does not exist, the script queries database. After the query has been fulfilled by the original database, the script stores the result in memcache, using the set command.

More details about this test

Create the MySQL database:

mysql -u root -p

At the mysql prompt, enter the following commands:

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

Create cache-test.php in your web server’s docroot:

$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;

Where <memcached hostname or ip> is either localhost, 127.0.0.1, or the memcache hostname or IP address. The <memcached port> is the listen port; by default, 11211.

Run the script from the command line.

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

The first result is got result from mysql. This means that the key did not exist in memcached but it was retrieved from MySQL.

The second result is got result from memcached, which verifies that the value is stored successfully in memcached.

Finally, you can view the memcache keys using Telnet:

telnet localhost <memcache port>

At the prompt, enter

stats items

The result is similar to the following:

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

Flush the memcache storage and quit Telnet:

flush_all
quit

Additional information about the Telnet test

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