OC v3.х Настраиваем Memcached / Redis на OpenCart 3

sanchozu

Разрушитель (V)
Сообщения
165
Симпатии
145
Баллы
3 887
Для кеша на Memcached
Проверяем наличия библиотеки Memcached для PHP:
Код:
php -i |grep memcache

Вывод выполненной команды:
Код:
memcache
memcache support => enabled
memcache.allow_failover => 1 => 1
memcache.chunk_size => 32768 => 32768
memcache.compress_threshold => 20000 => 20000
memcache.default_port => 11211 => 11211
memcache.hash_function => crc32 => crc32
memcache.hash_strategy => consistent => consistent
memcache.lock_timeout => 15 => 15
memcache.max_failover_attempts => 20 => 20
memcache.protocol => ascii => ascii
memcache.redundancy => 1 => 1
memcache.session_redundancy => 2 => 2
Registered save handlers => files user memcache

Далее меняем в config.php и admin/config.php
Код:
// Cache
define('CACHE_HOSTNAME', 'localhost');
define('CACHE_PORT', '11211');
define('CACHE_PREFIX', 'oc_');

system/config/default.php
Код:
// Cache
$_['cache_type']           = 'mem'; // apc, file or mem
$_['cache_expire']         = 3600;

Далее в папке system/storage/cache/ удаляем все файлы кроме index.html переходим на сайт и делаем переходы по страницам обновляем папку system/storage/cache/ если файлы в кэше не появляются все ОК
Очистить memcached кеш в Unix/Linux:
Код:
$ telnet localhost 11211
flush_all
quit

Для кеша на Redis

Проверяем работу Redis:

Код:
redis-cli ping
PONG /*возврат ответа*/

Для установки кеширования Redis у вас должен стоять и работать сервер Redis и подключен модуль redis для PHP, далее изменяем файлы так:
Далее меняем в config.php и admin/config.php
Код:
// Cache
define('CACHE_HOSTNAME', 'localhost');
define('CACHE_PORT', '6379');
define('CACHE_PREFIX', 'redis_');

system/config/default.php
Код:
// Cache
$_['cache_type']           = 'redis'; // apc, file or mem
$_['cache_expire']         = 3600;

Далее в папке system/storage/cache/ удаляем все файлы кроме index.html переходим на сайт и делаем переходы по страницам обновляем папку system/storage/cache/ если файлы в кэше не появляются все ОК

Также на Redis можно вынести сессии для этого создаем файлик system/library/session/redis.php с содержимим:
Код:
<?php
/**
 * Author: Shabalin Pavel
 */

namespace Session;


final class Redis
{
    public $expire = '';
    protected $prefix = 'sess_';

    public function __construct($registry)
    {
        $this->redis = new \Redis();

        if (!$this->redis->pconnect('127.0.0.1')) {
            throw new \Exception("Permissions denied session storage");
        }

        $this->expire = ini_get('session.gc_maxlifetime');
    }

    public function read($session_id)
    {
        if ($this->redis->exists($this->prefix . $session_id)) {
            return json_decode( $this->redis->get($this->prefix . $session_id), true );
        }

        return false;
    }

    public function write($session_id, $data)
    {
        if ($session_id) {
            $this->redis->psetex($this->prefix . $session_id, $this->expire * 1000, json_encode($data));
        }

        return true;
    }

    public function destroy($session_id)
    {
        if ($this->redis->exists($this->prefix . $session_id)) {
            $this->redis->delete($this->prefix . $session_id);
        }

        return true;
    }

    public function gc($expire) {
        return true;
    }

}

И меняем настройки для фронт и бэк части в файлах system/config/catalog.php и system/config/admin.php:
Код:
// Session
$_['session_engine']       = 'redis';

после этого сессии и кэш хранятся в оперативной памяти, что обеспечивает максимальную скорость считывания к «горячим» данным.
 
Еще бы кнопку в админке для очистки такого кэша и можно проверять разницу
 
  • Мне нравится
Симпатии: pozn
Для кеша на Memcached
Проверяем наличия библиотеки Memcached для PHP:
Код:
php -i |grep memcache

Вывод выполненной команды:
Код:
memcache
memcache support => enabled
memcache.allow_failover => 1 => 1
memcache.chunk_size => 32768 => 32768
memcache.compress_threshold => 20000 => 20000
memcache.default_port => 11211 => 11211
memcache.hash_function => crc32 => crc32
memcache.hash_strategy => consistent => consistent
memcache.lock_timeout => 15 => 15
memcache.max_failover_attempts => 20 => 20
memcache.protocol => ascii => ascii
memcache.redundancy => 1 => 1
memcache.session_redundancy => 2 => 2
Registered save handlers => files user memcache

Далее меняем в config.php и admin/config.php
Код:
// Cache
define('CACHE_HOSTNAME', 'localhost');
define('CACHE_PORT', '11211');
define('CACHE_PREFIX', 'oc_');

system/config/default.php
Код:
// Cache
$_['cache_type']           = 'mem'; // apc, file or mem
$_['cache_expire']         = 3600;

Далее в папке system/storage/cache/ удаляем все файлы кроме index.html переходим на сайт и делаем переходы по страницам обновляем папку system/storage/cache/ если файлы в кэше не появляются все ОК
Очистить memcached кеш в Unix/Linux:
Код:
$ telnet localhost 11211
flush_all
quit

Для кеша на Redis

Проверяем работу Redis:

Код:
redis-cli ping
PONG /*возврат ответа*/

Для установки кеширования Redis у вас должен стоять и работать сервер Redis и подключен модуль redis для PHP, далее изменяем файлы так:
Далее меняем в config.php и admin/config.php
Код:
// Cache
define('CACHE_HOSTNAME', 'localhost');
define('CACHE_PORT', '6379');
define('CACHE_PREFIX', 'redis_');

system/config/default.php
Код:
// Cache
$_['cache_type']           = 'redis'; // apc, file or mem
$_['cache_expire']         = 3600;

Далее в папке system/storage/cache/ удаляем все файлы кроме index.html переходим на сайт и делаем переходы по страницам обновляем папку system/storage/cache/ если файлы в кэше не появляются все ОК

Также на Redis можно вынести сессии для этого создаем файлик system/library/session/redis.php с содержимим:
Код:
<?php
/**
 * Author: Shabalin Pavel
 */

namespace Session;


final class Redis
{
    public $expire = '';
    protected $prefix = 'sess_';

    public function __construct($registry)
    {
        $this->redis = new \Redis();

        if (!$this->redis->pconnect('127.0.0.1')) {
            throw new \Exception("Permissions denied session storage");
        }

        $this->expire = ini_get('session.gc_maxlifetime');
    }

    public function read($session_id)
    {
        if ($this->redis->exists($this->prefix . $session_id)) {
            return json_decode( $this->redis->get($this->prefix . $session_id), true );
        }

        return false;
    }

    public function write($session_id, $data)
    {
        if ($session_id) {
            $this->redis->psetex($this->prefix . $session_id, $this->expire * 1000, json_encode($data));
        }

        return true;
    }

    public function destroy($session_id)
    {
        if ($this->redis->exists($this->prefix . $session_id)) {
            $this->redis->delete($this->prefix . $session_id);
        }

        return true;
    }

    public function gc($expire) {
        return true;
    }

}

И меняем настройки для фронт и бэк части в файлах system/config/catalog.php и system/config/admin.php:
Код:
// Session
$_['session_engine']       = 'redis';

после этого сессии и кэш хранятся в оперативной памяти, что обеспечивает максимальную скорость считывания к «горячим» данным.
спасибо за статью, из личного пользования, что лучше Memcached или Redis, и если Redis лучше, то какой сервак минимальный должен быть?)
 
спасибо за статью, из личного пользования, что лучше Memcached или Redis, и если Redis лучше, то какой сервак минимальный должен быть?)
Они сопоставимы по призводительности, + все зависит от настроек самого Memcached/Redis, обычно если покупаете хостинг под OpenCart то у хостера можно поинтересоваться что у него доступно ну и произвести замеры.
Я использовал кеш Memcached на обычном шаре хостинге.
 
Они сопоставимы по призводительности, + все зависит от настроек самого Memcached/Redis, обычно если покупаете хостинг под OpenCart то у хостера можно поинтересоваться что у него доступно ну и произвести замеры.
Я использовал кеш Memcached на обычном шаре хостинге.
понял, спасибо. У рег.ру (хотсер сайта) дорого за Memcached/Redis, думаю поднять у другого хостера (за копейки) виртуалку и размотать redis и примотать его к сайту.
 
Они сопоставимы по призводительности, + все зависит от настроек самого Memcached/Redis, обычно если покупаете хостинг под OpenCart то у хостера можно поинтересоваться что у него доступно ну и произвести замеры.
Я использовал кеш Memcached на обычном шаре хостинге.
а куда он на шареде пихает кэш ? сколько там оперативки ?
 
а куда он на шареде пихает кэш ? сколько там оперативки ?
Там где я размещаюсь шаред резервирует под учетку оперативку (Объём RAM), и до 1/4 объёма оперативки можно выделить под Memcache, на тарифе 8Гб соответственно у меня 2Гб под Memcache. можно взять свою папку cache и примерно прикинуть сколько надо. На VPS/VDS или физическом серваке понятное дело сам себе хозяин.
 
Там где я размещаюсь шаред резервирует под учетку оперативку (Объём RAM), и до 1/4 объёма оперативки можно выделить под Memcache, на тарифе 8Гб соответственно у меня 2Гб под Memcache. можно взять свою папку cache и примерно прикинуть сколько надо. На VPS/VDS или физическом серваке понятное дело сам себе хозяин.
8 гигов на шареде это хорошо конечно)
 
На обычном облачном часто отдельной услугой заказывается память под redis memcached, а что на счет opcache думаете? Полезно для opencart/wp?
 
На обычном облачном часто отдельной услугой заказывается память под redis memcached, а что на счет opcache думаете? Полезно для opencart/wp?
opcache для кеширования скомпилированого скрипта, в целом пишут что в 2-3 раза можно повысить скорость "компиляции", но обычно заметные тормоза сайта из-за запросов (индексы бд настроить, уменьшить/кешировать запросы), файловых операций, т.е. в конечном итоге если запос выполняется долго то что включен opcache, что нет сильно на загрузку страницы не повлияет.

1710516551658.png
 
Хм, но по цифрам приятно. Понятно что база данных - основной поставщик ожидания на больших сайта, индексы - вещь, но их тоже надо использовать грамотно , можно хуже сделать
 
Назад
Верх