Laravel Memcache

C++ JAVA
User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3357
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 128

Laravel Memcache

Post by dakata__92 » Fri Jan 24, 2020 3:56 pm

Колеги, имам един код на Laravel 6, който е качен на VPS-ка. С него се опитвам да направя кеширане на информация от заявка без да използвам "Query builder".

Code: Select all

public function getMemcache(String $sql, Array $options = [])
    {
        if (!isset($sql) and !is_string($sql)) {
            throw new \Exception("No SQL string!");
        }
        $options['ttl'] = (isset($options['ttl']) and (int) $options['ttl']) ? $options['ttl'] : 3600;
        $options['key'] = isset($options['key']) ? $options['key'] : md5($sql);
        $options['reset'] = isset($options['reset']) ? true : false;
        $options['reset_all'] = isset($options['reset']) ? true : false;
        $options['ip'] = isset($options['ip']) ? $options['ip'] : false;
        self::$memcahe['sql'] = $sql;
        self::$memcahe['options'] = $options;
        if ($options['reset']) {
            cache()->forget($options['key']);
        }
        if ($options['reset_all']) {
            cache()->flush();
        }
        return cache()->remember($options['key'], $options['ttl'], function () {
            return self::getDb()::query(self::$memcahe['sql'], self::$memcahe['options']['ip']);
        });
    }
Така викам кода:

Code: Select all

$memcacheOptions = [
                    'server_ip' => $servers[$i]['server_ip'],
                    'ttl' => 3600
];
$buffers[$i] = self::getMemcache("SELECT COUNT(id) as count FROM table ", $memcacheOptions)->fetch_object()->count;
Проблема ми е, че не успявам да направя кеширането. Някъде бъркам концептуално в използването на кеширането или някъде по опциите я на сървъра, я на Ларавел трябва да пипна? Получавам информация от базата, но когато направя в нея промяна ръчно през едитора, веднага се отразява и в системата, а не би трябвало. По принцип трябва да ми покаже кешираната НЕ променена стойност, докато изтече времето и. Дали е защото изполвам "remember"?

Fakeheal
Гуру
Гуру
Posts: 2718
Joined: Sat Apr 17, 2010 6:37 am
Answers: 351
Location: /r/eyebleach
Contact:

Re: Laravel Memcache

Post by Fakeheal » Sat Jan 25, 2020 8:12 pm

Нямам решение на проблема ти и мнението ми е оффтопик, за което се извинявам.

Защо го правиш това и защо го правиш така?

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3357
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 128

Re: Laravel Memcache

Post by dakata__92 » Sat Jan 25, 2020 9:13 pm

Fakeheal wrote:
Sat Jan 25, 2020 8:12 pm
Нямам решение на проблема ти и мнението ми е оффтопик, за което се извинявам.

Защо го правиш това и защо го правиш така?
Две отделни системи се използват. Ларавел е само за админ панела. В случая поради използването на външен клас за управление на базата с данни, то се налага да създам и кеширане на някои заявки. Ползвам вградената функционалност на Ларавел за това, но някъде нещо не ми се получава или с настройките на рамката и сървъра, или с кода, който съм дал.

Fakeheal
Гуру
Гуру
Posts: 2718
Joined: Sat Apr 17, 2010 6:37 am
Answers: 351
Location: /r/eyebleach
Contact:

Re: Laravel Memcache

Post by Fakeheal » Sat Jan 25, 2020 11:35 pm

Къде се намира кода, който си показал? Сигурен ли си, че всички неща на рамката са заредили преди да извикаш този код? Как точно си добавил този външен клас за управление на базата данни?

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3357
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 128

Re: Laravel Memcache

Post by dakata__92 » Sun Jan 26, 2020 6:10 am

Fakeheal wrote:
Sat Jan 25, 2020 11:35 pm
Къде се намира кода, който си показал? Сигурен ли си, че всички неща на рамката са заредили преди да извикаш този код? Как точно си добавил този външен клас за управление на базата данни?
Кода се намира в модел. Всичко е заредено.

Проблема не е в класът, който ползвам, а явно в кода който съм дал. Дали някоя от настройките на Ларавел не съм съобразил да настроя или нещо на сървъра свързано с кеширането?

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 921
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 65

Re: Laravel Memcache

Post by Revelation » Sun Jan 26, 2020 11:10 am

Ами дай да видим как си конфигурирал Ларавел да използва memcached.
Само едно хранилище имаш?
Получаваш ли грешки?
Дебъгна ли Memcached да видиш дали съдържа нещо?
Ако няма стойности, значи проблема е в конфигурацията или сървъра.

Знаеш ли как е конфигуриран memcached?

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3357
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 128

Re: Laravel Memcache

Post by dakata__92 » Sun Jan 26, 2020 2:07 pm

Revelation wrote:
Sun Jan 26, 2020 11:10 am
Ами дай да видим как си конфигурирал Ларавел да използва memcached.
Само едно хранилище имаш?
Получаваш ли грешки?
Дебъгна ли Memcached да видиш дали съдържа нещо?
Ако няма стойности, значи проблема е в конфигурацията или сървъра.

Знаеш ли как е конфигуриран memcached?
По принцип нищо не съм пипал, още. Тоест си е стандартна инсталация на Ларавел. Ако знаеш къде да видя и проверя дали всички чекове са пуснати, сподели. Нямам грешки, връща ми инстанциите, просто ми актуализира нещата постоянно.

Fakeheal
Гуру
Гуру
Posts: 2718
Joined: Sat Apr 17, 2010 6:37 am
Answers: 351
Location: /r/eyebleach
Contact:

Re: Laravel Memcache

Post by Fakeheal » Sun Jan 26, 2020 2:13 pm

В документацията пише:

Code: Select all

If you are using the Memcached driver, items that are stored "forever" may be removed when the cache reaches its size limit.
В твоя код какво е

Code: Select all

self::$memcache
и AFAIK memcached автоматично изтрива "стари" записи.

* "стари" - stale - по негова дефиниция

Можеш ли да дадеш примерен (и орязан модел) от апа ти?

PS: може би тъпа идея, но:

Code: Select all

dd(cache()->driver());
какво ти връща? :D

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 921
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 65

Re: Laravel Memcache

Post by Revelation » Sun Jan 26, 2020 3:50 pm

dakata__92 wrote:
Sun Jan 26, 2020 2:07 pm
Revelation wrote:
Sun Jan 26, 2020 11:10 am
Ами дай да видим как си конфигурирал Ларавел да използва memcached.
Само едно хранилище имаш?
Получаваш ли грешки?
Дебъгна ли Memcached да видиш дали съдържа нещо?
Ако няма стойности, значи проблема е в конфигурацията или сървъра.

Знаеш ли как е конфигуриран memcached?
По принцип нищо не съм пипал, още. Тоест си е стандартна инсталация на Ларавел. Ако знаеш къде да видя и проверя дали всички чекове са пуснати, сподели. Нямам грешки, връща ми инстанциите, просто ми актуализира нещата постоянно.
Отвори .env файла и ми дай частта, където са CACHE_* конфигурациите. Ако там е оставено на file, а си конфигурирал memcached в config/cache.php файла, е много вероятно в момента да имаш 2 store-a.

Също, ако там си го настройл правилно, върни драйвъра на file и опитай отново, да видиш дали ще се оправи. Ако се оправи, значи Memcached сървъра се дъни някъде.
Виж версията на Memcached в phpinfo(). Също, ако използваш PHP 7.3 ти трябва версия на библиотеката поне 3.1.0 (3.1.3 за PHP 7.4).
Ако не са съвместими най-вероятно дава грешка, но не боли да провериш.

Конфигурацията на memcached по принцип е в /etc/memcached.conf.

Ако имаш възможност, по принцип ти препоръчвам да минеш на Redis.

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3357
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 128

Re: Laravel Memcache

Post by dakata__92 » Sun Jan 26, 2020 5:15 pm

Не съм на машината тази вечер, но утре ще разгледам и изтествам предложенията Ви.

Code: Select all

self::$memcache
Това е просто глобална променлива / масив, която ползвам за да пренеса инфото от метода в анонимната функция на "remember". Кода е писан много набързо и не съм оптимизирал нещата, но просто при тестовете не се държеше, както се очакваше да стане. Ще разгледам утре и конфигурацията, като се надявам колегите или аз да не сме пипали нещо, без да се осетим и да е повлияло.

Не съм ползвал Redis, ще прочета за него.

Post Reply