помогите Redis

A

alex_chapman

Шопмейкер
#1
Уважаемые форумчане, как и у кого получалось полноценно подключать Redis к своим проектам на третьей ветке opencart?
Прошу поделиться хорошим мануалам, а то в гугле способы в основном вызывают кучу разных ошибок.
 
Marius

Marius

Шопмейкер
#2
Доброго времени суток, уважаемый!
Все не так печально, и можно найти ответ на свой вопрос, но нужно понимать некоторые моменты, например адрес сервера, где хранится множество с ключами, ну и полный кэш я бы не ставил на редис, исключительно многомерность значений для фильтра или ещё какой то сложной вычислительной логики магазина.
Но начинать надо с файла конфигурации и соответственно с изменения его настроек, покажите, что и как там меняли и покажите, как меняли файл настроек кэша?
 
Baco

Baco

architect
#3
глянув бігло по мережі, й справді, немає толком рішень для опену, за виключенням додавання в композер нового вендора, наприклад predis і вже його використовувати, та всерівно треба окремий клас, як обгортку на клієнта redis писати, а платні рішення не розглядали ?
 
S

SlaSoft

Maestro
#4
по дефолту віг робочий, але в ранніх версіях є недолік - шукати відповідь на офсайті (гіте)
 
Симпатії: Baco
yura_co

yura_co

master
#5
Поясніть будь ласка взагалі навіщо редіс? Я не знайшов взагалі доцільність його використання
 
S

SlaSoft

Maestro
#7
кешування дуже великих даних та швидкий доступ до них
вот как раз большие данные лучше не кешировать
доступ быстрее? хм.. ведь доступ через сетевое окружение..
Что быстрее локальный файл или сеть?
допустим сеть
Где хранятся данные, возможно в памяти.. Памяти мало не бывает?

в основном все это связано с надежностью хранения и неблокирующий доступ

Если файловый кеш хранит строки, то редис может хранить структуры, Опа..
А кешируются у нас в основном массивы json_encode|json_decode а это все же время
в адапторе опенкарта для редиса так и есть. , но тут есть причина за рамками топика
 
Останнє редагування:
Baco

Baco

architect
#8
ну, похоліварити можна, я на 5-му редісі структурував мільйонні записи, це з практики, щоб оптимізувати роботу фільтра + підтримка завжди актуальних даних, маніпуляція многомірними даними по ключам дозволяє досить гнучко то все проводити, але... є багато але.
на разі, для редіса є кілька обгорток, але то все потрібно адаптовувати безпосередньо під проект, тема ТС досить абстрактна і звучить швидше "чи немає тут готового рішення [plug&use]", з моєї практики, то менше 0.01% користується цим розширенням, тому воно не так вже й популярність має, щоб готовим рішенням виносити в модуль для продажу.
@alex_chapman напишіть з якими проблемами зіштовхнулись в процессі інтеграції рішення, а ми, зі своєї сторони, спробуємо допомогти порадою чи якимось фіксом\рішенням.
 
ALarik

ALarik

expert
#9
нашел вот такое решение, но насколько юзабельно - хз, но метод удаления, точно устарел, на новом редисе, помню что он укороченую инструкцию имеет: del
 
OP
A

alex_chapman

Шопмейкер
Thread Starter #10
ну, похоліварити можна, я на 5-му редісі структурував мільйонні записи, це з практики, щоб оптимізувати роботу фільтра + підтримка завжди актуальних даних, маніпуляція многомірними даними по ключам дозволяє досить гнучко то все проводити, але... є багато але.
на разі, для редіса є кілька обгорток, але то все потрібно адаптовувати безпосередньо під проект, тема ТС досить абстрактна і звучить швидше "чи немає тут готового рішення [plug&use]", з моєї практики, то менше 0.01% користується цим розширенням, тому воно не так вже й популярність має, щоб готовим рішенням виносити в модуль для продажу.
@alex_chapman напишіть з якими проблемами зіштовхнулись в процессі інтеграції рішення, а ми, зі своєї сторони, спробуємо допомогти порадою чи якимось фіксом\рішенням.
У меня просто сайт вырубается в белый эран при включении редиса
Делаю по этой инструкции: https://www.aisamiery.ru/opencart-i-redis/
3.0.3.6 бро
 
OP
A

alex_chapman

Шопмейкер
Thread Starter #12
результат падения должен отобразиться в системном логе ошибок
Нуль ошибок. Потому я психанул, все вернул на места и отписался на форуме. Может у кого будет человеческая инструкция по полноценному внедрению redis на бро?
 
OP
A

alex_chapman

Шопмейкер
Thread Starter #14
системный лог = ошибки php
Если не знаете где искать/смотреть = спросите у хостера
Вечером попробую снова поставить отловить ошибки редиски. Отпишусь. Сейчас пытаюсь побороть баги из соседней темы
 
OP
A

alex_chapman

Шопмейкер
Thread Starter #16
хороша інструкція, давайте логи і заведемо редиску на бро)
При попытке загрузки страницы после изменения движка на redis выскакивает следующее:
Fatal error: Uncaught Error: Class 'Redis' not found in /system/library/cache/redis.php:10 Stack trace: #0 /system/library/cache.php(27): Cache\Redis->__construct(3600) #1 /xn--b1agjiih2ae7a5c.xn--90ais/system/framework.php(110): Cache->__construct('redis', 3600) #2/system/startup.php(104): require_once('/var/www/www-ro...') #3 /index.php(22): start('catalog') #4 {main} thrown in /system/library/cache/redis.php on line 10
В логах сервера:
2021/12/24 18:48:45 [error] 1042#1042: *468260 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Class 'Redis' not found in /var/www/www-root/data/www/xn--b1agjiih2ae7a5c.xn--90ais/system/library/cache/redis.php:10
Stack trace:
#0 /system/library/cache.php(27): Cache\Redis->__construct(3600)
#1 /system/framework.php(110): Cache->__construct('redis', 3600)
#2 /system/startup.php(104): require_once('/var/www/www-ro...')
#3 /admin/index.php(21): start('admin')
#4 {main}
thrown in /system/library/cache/redis.php on line 10" while reading response header from upstream, client: 185.23.200.134, server: xn--b1agjiih2ae7a5c.xn--90ais, request: "POST /admin/ HTTP/1.1", upstream: "fastcgi://unix:/var/www/php-fpm/9.sock:", host: "xn--b1agjiih2ae7a5c.xn--90ais:443"

Дальше по инструкции само собой идти смысла нет

PHP:
<?php
namespace Cache;
class Redis {
    private $expire;
    private $cache;

    public function __construct($expire) {
        $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) {
        $status = $this->cache->set(CACHE_PREFIX . $key, json_encode($value));
        if($status){
            $this->cache->setTimeout(CACHE_PREFIX . $key, $this->expire);
        }
        return $status;
    }

    public function delete($key) {
        $this->cache->delete(CACHE_PREFIX . $key);
    }
}
 
Зверху