Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

блог для натуралов

  • записів
    10
  • коментаря
    72
  • переглядів
    9 150

redis cache opencart


kJlukOo

4 469 переглядів

недавно увидел что на официальном сайте продается драйвер под редис. ссылку прикладывать не буду

а вот тот самый редис, который уже давно есть на гитхабе (с 6 июля 2017 года)

https://github.com/opencart/opencart/blob/master/upload/system/library/cache/redis.php

 

как кеш опенкарта делегировать редису?

чтобы заставить работать редис на своем сервере необходимо 

 

1. установить редис и добавить его в список автозагрузки, установить php модуль для редиса . для разных осей комманды могут отличаться. гугл в помощь!

2. актуально для всей ветки 2х ocstore/opencart. в 3х версии окстор и опенкарт драйвер  уже есть

создаем файл system/library/cache/redis.php содержимое вот https://github.com/opencart/opencart/blob/master/upload/system/library/cache/redis.php

3. создаем файл redis_test.php в корневой директории сайта, вызывать его будем следующим образом https://site.com/redis_test.php

это мы делаем, для того, чтобы протестировать редис перед включением, чтобы избежать краша магазина

<?php
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

include __DIR__.'/system/library/cache/redis.php';
$expire = 5000;

//namespace opencart 4 O_O
$obj_redis = new Opencart\System\Library\Cache\Redis($expire);
//namespace opencart 3x
//$obj_redis = new Cache\Redis($expire);

$obj_redis->set('key', 'REDIS WORK FINE');
$res = $obj_redis->get('key');
echo $res;

сохраняем файл. открываем браузер и вызываем https://site.com/redis_test.php

если видим REDIS WORK FINE то сразу к следующему пункту

ошибки, которые могут говорить о

  • криво установленном редисе => пункт 1
  • отсутствии файла => пункт 2
  • не забывайте. что редис должен быть включен и установлен пхп модуль редис

 

 

4. этот пункт выполняем только в случае, если в п3 видим REDIS WORK FINE

в конфиге по пути ocs23/system/config/default.php 

находим строку

$_['cache_type']           = 'file'; // apc, file or mem

и меняем на 

$_['cache_type']           = 'redis'; // apc, file or mem

 

 

 

  • +1 1

17 коментарів


Recommended Comments

Доброго дня пробую поставить выдает ошибку 

Parse error: syntax error, unexpected 'int' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST) in /var/www/site/data/www/site.com/system/library/cache/redis.php on line 4

 

Подскажите пожалуйста что может быть не так ?

Надіслати

пробовал добавить в файлы config.php и admin->config.php

// Redis
define('CACHE_HOSTNAME', '127.0.0.1');
define('CACHE_PORT', '6379');
define('CACHE_PREFIX', 'redis_');
define('CACHE_PASSWORD', '');

 

не помогло

Надіслати
12 часов назад, MaxD сказал:

Версия PHP у вас занизкая для этого файла, скорее всего хочет какой-то PHP 7.3 или 7.4.

Спасибо буду искать вариант под пхп 7,1

 

Надіслати
1 час назад, multimen сказал:

Спасибо буду искать вариант под пхп 7,1

Попробуйте так:

<?php
namespace Opencart\System\Library\Cache;
class Redis {
	private $expire;
	private $cache;

	public function __construct($expire = 3600) {
		$this->expire = $expire;

		$this->cache = new \Redis();
		$this->cache->pconnect(CACHE_HOSTNAME, CACHE_PORT);
	}

	public function get($key) {
		$data = $this->cache->get(CACHE_PREFIX . $key);

		return json_decode($data, true);
	}

	public function set($key, $value, $expire = 0) {
		if (!$expire) {
			$expire = $this->expire;
		}

		$status = $this->cache->set(CACHE_PREFIX . $key, json_encode($value));

		if ($status) {
			$this->cache->expire(CACHE_PREFIX . $key, $expire);
		}
	}

	public function delete($key) {
		$this->cache->del(CACHE_PREFIX . $key);
	}
}

 

Надіслати

Пробовал, правда на версии php5.6, не подгружает драйвер "Error: Could not load cache adaptor redis cache!", хотя тестовый файл работает

Надіслати
9 часов назад, mpn2005 сказал:

Попробуйте так:

 

Выдает ошибки

Notice: Use of undefined constant CACHE_HOSTNAME - assumed 'CACHE_HOSTNAME' in /var/www/***/data/www/***.ru/system/library/cache/redis.php on line 11

Notice: Use of undefined constant CACHE_PORT - assumed 'CACHE_PORT' in /var/www/***/data/www/***.ru/system/library/cache/redis.php on line 11

Warning: Redis::pconnect() expects parameter 2 to be integer, string given in /var/www/***/data/www/***.ru/system/library/cache/redis.php on line 11

Notice: Use of undefined constant CACHE_PREFIX - assumed 'CACHE_PREFIX' in /var/www/***/data/www/***.ru/system/library/cache/redis.php on line 25

Fatal error: Uncaught RedisException: Redis server went away in /var/www/***/data/www/***.ru/system/library/cache/redis.php:25 Stack trace: #0 /var/www/***/data/www/***.ru/system/library/cache/redis.php(25): Redis->set('CACHE_PREFIXkey', '"REDIS WORK FIN...') #1 /var/www/***/data/www/***.ru/redis_test.php(14): Opencart\System\Library\Cache\Redis->set('key', 'REDIS WORK FINE') #2 {main} thrown in /var/www/***/data/www/***.ru/system/library/cache/redis.php on line 25

Надіслати
18 минут назад, multimen сказал:

Notice: Use of undefined constant CACHE_HOSTNAME - assumed 'CACHE_HOSTNAME' in /var/www/***/data/www/***.ru/system/library/cache/redis.php on line 11

Тут уже причина не в версии PHP, а в недостающих переменных конфигурации для подключения к redis.

 

В 06.07.2021 в 23:25, multimen сказал:

пробовал добавить в файлы config.php и admin->config.php

// Redis
define('CACHE_HOSTNAME', '127.0.0.1');
define('CACHE_PORT', '6379');
define('CACHE_PREFIX', 'redis_');
define('CACHE_PASSWORD', '');

 

не помогло

Вот это по любому нужно добавлять.

Это, по сути, как конфиг коннекта к БД.

Надіслати
9 годин назад, mpn2005 сказав:

Вот это по любому нужно добавлять.

Это, по сути, как конфиг коннекта к БД.

Кстати в 2.3 из конфигов константы не тянет, пока не прописал в redis.php не работало

Надіслати
6 часов назад, Flint2000 сказал:

Кстати в 2.3 из конфигов константы не тянет, пока не прописал в redis.php не работало

Если можно подробнее как прописать константы в redis.php в самих конфигах все прописал.

Какой код вы вставили в redis.php, если конечно не секрет.

Надіслати
7 хвилин назад, multimen сказав:

Если можно подробнее как прописать константы в redis.php в самих конфигах все прописал.

Какой код вы вставили в redis.php, если конечно не секрет.

Вот кусок кода

class Redis {
	private $expire;
	private $cache;

	public function __construct($expire) {
		
		define('CACHE_HOSTNAME', 'localhost');
		define('CACHE_PORT', '6379');
		define('CACHE_PREFIX', 'redis_');
		
		$this->expire = $expire;

		$this->cache = new \Redis();
		$this->cache->pconnect(CACHE_HOSTNAME, CACHE_PORT);

 

Надіслати
9 часов назад, Flint2000 сказал:

Кстати в 2.3 из конфигов константы не тянет, пока не прописал в redis.php не работало

Что-то очень загадочное получается.

Это же глобальные константы. И от версии движка это не зависит.

Вы точно их прописывали в оба конфига?

Надо писать в config.php и в admin/config.php

 

Надіслати
8 минут назад, Flint2000 сказал:

Точно прописывал, в оба

Должно работать. Все же остальные константы по движку работают. Эти от них ничем не отличаются.

Может быть opcache шалит. И надо было его очистить.

Надіслати
20 часов назад, Flint2000 сказал:

Вот кусок кода


class Redis {
	private $expire;
	private $cache;

	public function __construct($expire) {
		
		define('CACHE_HOSTNAME', 'localhost');
		define('CACHE_PORT', '6379');
		define('CACHE_PREFIX', 'redis_');
		
		$this->expire = $expire;

		$this->cache = new \Redis();
		$this->cache->pconnect(CACHE_HOSTNAME, CACHE_PORT);

 

блин вставил заработало, убираю ошибка, странно но факт

Надіслати

В итоге последний шаг делаю сайт ложиться, пока отложил на потом этот вопрос....

Спасибо всем за помощь

Змінено користувачем multimen
Надіслати

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.