2.13.4.9. Memcache (d) setup in OpenCart

Setting process Memcache(d) differs in different versions of OpenCart.

  1. At the end of each of the two configuration files add code like this:
    // CACHE
    define('CACHE_HOSTNAME', '/home/example/.system/memcache/socket');
    define('CACHE_PORT', '0');
    define('CACHE_PREFIX', 'oc_');

    In the line with the parameter CACHE_HOSTNAME insteadof example indicate hosting account namein which the site is hosted.

  2. Edit the file default.phplocated in the directory system/config:
    • Find a block of code like this:
      // Cache
      $_['cache_engine'] = 'file'; // apc, file, mem or memcached
      $_['cache_expire'] = 3600;
    • In the line with the parameter cache_engine replace file on memcachedso that the block of code looks like this:
      // Cache
      $_['cache_engine'] = 'memcached'; // apc, file, mem or memcached
      $_['cache_expire'] = 3600;
  3. Check the site is working.
  1. At the end of each of the two configuration files add code like this:
    // CACHE
    define('CACHE_HOSTNAME', 'unix:///home/example/.system/memcache/socket');
    define('CACHE_PORT', '0');
    define('CACHE_PREFIX', 'oc_');

    In the line with the parameter CACHE_HOSTNAME insteadof example indicate hosting account namein which the site is hosted.

  2. Edit the file default.phplocated in the directory system/config:
    • Find a block of code like this:
      // Cache
      $_['cache_type'] = 'file'; // apc, file or mem
      $_['cache_expire'] = 3600;
    • In the line with the parameter cache_type replace file on memso that the block of code looks like this:
      // Cache
      $_['cache_type'] = 'mem'; // apc, file or mem
      $_['cache_expire'] = 3600;
  3. Check the site is working.
  1. At the end of each of the two configuration files add code like this:
    // CACHE
    define('CACHE_HOSTNAME', 'unix:///home/example/.system/memcache/socket');
    define('CACHE_PORT', '0');
    define('CACHE_PREFIX', 'oc_');

    In the line with the parameter CACHE_HOSTNAME insteadof example indicate hosting account namein which the site is hosted.

  2. Edit two files index.phpone of which is in root directory site, the second - in the subdirectory admin:
    • Find a block of code like this:
      // Cache
      $cache = new Cache('file');
      $registry->set('cache', $cache);
    • On a line with a variable $cache replace file on memso that the block of code looks like this:
      // Cache
      $cache = new Cache('mem');
      $registry->set('cache', $cache);
  3. Check the site is working.
  1. At the end of each of the two configuration files add code like this:
    define('CACHE_DRIVER', 'memcached');
    define('MEMCACHE_HOSTNAME', 'unix:///home/example/.system/memcache/socket');
    define('MEMCACHE_PORT', '0');
    define('MEMCACHE_NAMESPACE', 'opencart_test');

    In the line with the parameter MEMCACHE_HOSTNAME insteadof example indicate hosting account namein which the site is hosted.

  2. Replace the entire contents of the file system/library/cache.php to the following:
    <?php
    final class Cache {
        private $expire;
        private $memcache;
        private $ismemcache = false;
        public function __construct($exp = 3600) {
            $this->expire = $exp;
            if (CACHE_DRIVER == 'memcached') {
                $mc = new Memcache;
                if ($mc->pconnect(MEMCACHE_HOSTNAME, MEMCACHE_PORT)) {
                    $this->memcache = $mc;
                    $this->ismemcache = true;
                };
            };
            $files = glob(DIR_CACHE . 'cache.*');
            if ($files) {
                foreach ($files as $file) {
                    $time = substr(strrchr($file, '.'), 1);
                    if ($time < time()) {
                        if (file_exists($file)) {
                            @unlink($file);
                        }
                    }
                }
            }
        }
        public function get($key) {
            if ((CACHE_DRIVER == 'memcached') && $this->ismemcache) {
                return($this->memcache->get(MEMCACHE_NAMESPACE . $key, 0));
            } else {
                $files = glob(DIR_CACHE . 'cache.' . $key . '.*');
                if ($files) {
                    foreach ($files as $file) {
                        $cache = '';
                        $handle = fopen($file, 'r');
                        if ($handle) {
                            $cache = fread($handle, filesize($file));
                            fclose($handle);
                        }
                        return unserialize($cache);
                    }
                }
            }
        }
        public function set($key, $value) {
            if ((CACHE_DRIVER == 'memcached') && $this->ismemcache) {
                $this->memcache->set(MEMCACHE_NAMESPACE . $key, $value, 0, $this->expire);
            } else {
                $this->delete($key);
                $file = DIR_CACHE . 'cache.' . $key . '.' . (time() + $this->expire);
                $handle = fopen($file, 'w');
                fwrite($handle, serialize($value));
                fclose($handle);
            };
        }
        public function delete($key) {
            if ((CACHE_DRIVER == 'memcached') && $this->ismemcache) {
                $this->memcache->delete(MEMCACHE_NAMESPACE . $key);
            } else {
                $files = glob(DIR_CACHE . 'cache.' . $key . '.*');
                if ($files) {
                    foreach ($files as $file) {
                        if (file_exists($file)) {
                            @unlink($file);
                            clearstatcache();
                        }
                    }
                }
            }
        }
    }
    ?>
  3. Check the site is working.
Content