Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Ткните носом в memcached, jet cache, opcache


mario512
 Поделиться

Рекомендованные сообщения

У хостера данные штуки поддерживаются. Memcached и Opcache работают в не зависимости от cms? А Jet Cashe нужно активировать в OpenCart? У меня OsStore 2.3.02, где то видел на форуме инструкцию как его активировать без модулей. Не могу ее найти. 

Ссылка на комментарий
Поделиться на других сайтах

А кеширование запросов стоит подключать? Наткнулся на https://github.com/iMateo/oc2-mysqli-cached Но насколько я понял, что данный метод не работает на 2,3

Ссылка на комментарий
Поделиться на других сайтах

Закинул указанный файл в каталог system/library/db/mysqli_cached.php

<?php
namespace DB;
final class MySQLi_Cached {
	private $link;
    private $cache;
    private $cachedquery;

    public function __construct($hostname, $username, $password, $database, $port = '3306') {
        $this->cache = new Cache(DB_CACHED_EXPIRE);
        $this->link = new \mysqli($hostname, $username, $password, $database, $port);
        if ($this->link->connect_error) {
         trigger_error('Error: Could not make a database link (' . $this->link->connect_errno . ') ' . $this->link->connect_error);
         exit();
     }

     $this->link->set_charset("utf8");
     $this->link->query("SET SQL_MODE = ''");
     $this->link->query("SET NAMES 'utf-8");
     $this->link->query("SET CHARACTER_SET_CONNECTION=utf8");

 }
 
 public function query($sql) {
        // Only SELECT query
        // COMMENTS HERE
        // COMMENTS HERE
        // COMMENTS HERE
    $isselect = 0;
    $md5query = '';
    $pos = stripos($sql, 'select ');
    if ($pos == 0)
    {
        $isselect = 1;
        $md5query = md5($sql);
        if ($query = $this->cache->get('sql_' . $md5query)) {
            if ($query->sql == $sql) {
                if ($resetflag = $this->cache->get('sql_globalresetcache')) {
                    if ($resetflag <= $query->time) {
                        $this->cachedquery = $query;
                        return($query);
                    }
                    else {
                     $this->cachedquery = $query;
                     return($query);
                     
                 }                        
             }
         }
     }
     $resource = $this->link->query($sql);
     if ($resource) {
        if (is_resource($resource)) {
            $i = 0;
            $data = array();
            while ($result = $query->fetch_accoc($resource)) {
                $data[$i] = $result;
                $i++;
            }
            
        }
    }
}

$query = $this->link->query($sql);

if (!$this->link->errno) {
 if ($query instanceof \mysqli_result) {
    $data = array();
    while ($row = $query->fetch_assoc()) {
       $data[] = $row;
   }

   $result = new \stdClass();
   $result->num_rows = $query->num_rows;
   $result->row = isset($data[0]) ? $data[0] : array();

   $result->rows = $data;

   $query->close();

   return $result;
} else {
    return true;
}
} else {
 trigger_error('Error: ' . $this->link->error  . '<br />Error No: ' . $this->link->errno . '<br />' . $sql);


}
}

public function escape($value) {
  return $this->link->real_escape_string($value);

}

public function countAffected() {
    if(isset($this->cachedquery) && $this->cachedquery)
    {
        return $this->cachedquery->num_rows;
    }
    else {
        return $this->link->affected_rows;    
    }


    






}

public function getLastId() {


  return $this->link->insert_id;
}

public function __destruct() {


  $this->link->close();
}
}

Заменил в конфиге

define('DB_DRIVER', 'mysqli');

на

define('DB_DRIVER', 'mysqli_cached');

 

И получил ошибку 500. Что не так?

Ссылка на комментарий
Поделиться на других сайтах

23 минуты назад, mario512 сказал:

Закинул указанный файл в каталог system/library/db/mysqli_cached.php

При такой реализации будет больше вреда, чем пользы.

Так вообще не стоит делать по куче причин.

 

Ссылка на комментарий
Поделиться на других сайтах

1 час назад, mpn2005 сказал:

При такой реализации будет больше вреда, чем пользы.

Так вообще не стоит делать по куче причин.

 

Чем это грозит?

Ссылка на комментарий
Поделиться на других сайтах

1 минуту назад, mario512 сказал:

Чем это грозит?

На реально рабочем магазине такое кэширование его замедлит, а не ускорит.

Это кэширование будет "ускорять" только при синтетическом тестировании в вакууме.

 

А так же приведёт к получению ошибочных данных. 

Например товар уже закончился, а покупатель получает информацию, что такой товар ещё есть, т.к. данные из кэша.

Да и корзина хранится в БД. Тут при кэшировании будет вообще непонятная каша.

И т.д. Это далеко ещё не весь список.

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

  • 6 месяцев спустя...
В 23.06.2020 в 14:49, mario512 сказал:

А кеширование запросов стоит подключать? Наткнулся на https://github.com/iMateo/oc2-mysqli-cached Но насколько я понял, что данный метод не работает на 2,3

 

Это мой модуль, я его тогда не допилил (

Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.