Jump to content
Sign in to follow this  
UncleAndy

Кэширование через memcached и драйвер mysql_cached

Recommended Posts

UPD. 

Кстати, в первом сообщении заменить бы фрагмент

2. Сделал вариант драйвера БД mysql_cached, в котором кэшируются запросы SQL. Время кэширования настривается через config.php:
define('DB_CACHED_EXPIRE', 120);

 

На

2. Сделал вариант драйвера БД mysql_cached, в котором кэшируются запросы SQL. Время кэширования настривается через config.php:
define('DB_CACHED_EXPIRE', 120);
define('DB_DRIVER', 'mysql_cached');

А то неполная получается информация о настройке. 

Share this post


Link to post
Share on other sites

Так есть полное решение вопроса с подключение мемкеша с хостинга на сборку?

Share this post


Link to post
Share on other sites

Здравствуйте, воспользовался вашем решением.

Хостинг украина 

Сокет memcached   :/home/deyman/.system/memcache/socket

 

Вот мой конфиг 

define('CACHE_DRIVER', 'memcached');
define('MEMCACHE_HOSTNAME', 'unix:///home/deyman/.system/memcache/socket');
define('MEMCACHE_PORT', '0');
define('MEMCACHE_NAMESPACE', 'opencart_test');
define('DB_CACHED_EXPIRE', 3600);

 

memcached работатет база ростет.

Но кеш сайта который должен был вроде отключится все равно приболяется.

И ошибки в логах очень много 

 

PHP Notice:  Use of undefined constant CACHE_DRIVER - assumed 'CACHE_DRIVER' in /home/****/*****/www/system/library/cache.php on line 10

 

Ребята помогите пожалуйста уже мозги кипят

Share this post


Link to post
Share on other sites

А что на счет mysqli есть ли рабочая версия с кэшированием как в mysql_cached?

Share this post


Link to post
Share on other sites

На https://github.com/iMateo/oc2-mysqli-cached нашел вроде такой драйвер, но он что то не работает хотя сайт в рабочем состоянии. Версия opencart 1.5.4.1. Ниже содержимое файла mysqli_cached.php

<?php

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");
        $this->link->query("SET SQL_MODE = ''");
        $this->link->query("SET SESSION wait_timeout = 3600");
    }

    public function query($sql) {

        $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;

                unset($data);

                if ($isselect == 1) {
                    $result->sql = $sql;
                    $result->time = time();

                    $this->cache->set('sql_' . $md5query, $result);
                };
                unset($this->cachedquery);

                $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();
    }

}

 

Share this post


Link to post
Share on other sites

помогите, пожалуйста, адаптировать скрипт под mysqli. код выше не работает

ошибка PHP Parse error:  syntax error, unexpected ';', expecting '(' in /mysqli_cached.php on line 62
в этом месте (конкретно - строка $data = array;):

$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++;
                    }
                    
                }
            }

 

P.S. Версия движка 1.5

Edited by cokol

Share this post


Link to post
Share on other sites

потому что массив объявляется array();

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.