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

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


mario512

Recommended Posts

У хостера данные штуки поддерживаются. 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 months later...
В 23.06.2020 в 14:49, mario512 сказал:

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

 

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

Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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