Laravel 8: Memcache and Memcached

Код:
        dump(cache()->store('memcached')->put('key', 'test', 10));
        dump(cache()->store('memcached')->getStore()->getMemcached()->getResultMessage());
        dump(cache()->store('memcached')->getStore()->getMemcached()->getResultCode());
        dump(cache()->store('memcached')->add('key', 'test', 10));
        dump(cache()->store('memcached')->getStore()->getMemcached()->getResultMessage());
        dd(cache()->store('memcached')->getStore()->getMemcached()->getResultCode());
Това връща:
true
"SUCCESS"
0
true
"SUCCESS"
0
 
dakata__92 каза:
Код:
        dump(cache()->store('memcached')->put('key', 'test', 10));
        dump(cache()->store('memcached')->getStore()->getMemcached()->getResultMessage());
        dump(cache()->store('memcached')->getStore()->getMemcached()->getResultCode());
        dump(cache()->store('memcached')->add('key', 'test', 10));
        dump(cache()->store('memcached')->getStore()->getMemcached()->getResultMessage());
        dd(cache()->store('memcached')->getStore()->getMemcached()->getResultCode());
Това връща:
true
"SUCCESS"
0
true
"SUCCESS"
0

Шах съм, честно. Ще трябва да тествам собственоръчно, да ми е пред очите, че с тези тестове само гадая.

Ако не те мързи тествай със 7-ма версия. Аз ще видя кога ще успея да тествам лично.
 
Темата е все още валидна. Открихме, че Ларавел по някаква причина при мемкеш ttl под 8 минутки не приема за кеширане.
Код:
$key = md5('key);
        dump($key);
        cache()->store('memcached')->remember($key, 60 , function () {
            return ['array'];
        });
        if (cache()->store('memcached')->has($key)) {
            dump(cache()->store('memcached')->get($key));
        }
        dd('Stop');

Ако подам 60 секунди не добавя нищо, но ако увелича времето на 480 примерно и започва да запаметява. Какво да правя?
 
Да нямате проблеми с времената на машината, където кода се изпълнява? Ларавел ползва Carbon за обработка на времената и зад колисите обръща тези секунди в timestamp.

Може да тестваш да видиш дали нещата се изчисляват правилно.

Направи си един тестов клас и извикай InteractsWithTime трейта и тествай какво ще ти върне

Код:
$this->availableAt($seconds);
 
Revelation каза:
Да нямате проблеми с времената на машината, където кода се изпълнява? Ларавел ползва Carbon за обработка на времената и зад колисите обръща тези секунди в timestamp.

Може да тестваш да видиш дали нещата се изчисляват правилно.

Направи си един тестов клас и извикай InteractsWithTime трейта и тествай какво ще ти върне

Код:
$this->availableAt($seconds);
Всичко е нормално с часът. Възможно ли е да е от настройка на php за Memcached или от настройка на самата библиотека на сървъра?
 
djman каза:
А за пробата - ако добавиш някакъв малък sleep между remember & has?
Тествах преди малко, не става. Впрочем системния администратор ми извади едно шелче, с което на практика да си проверявам ключовете дали съществуват. Ами не се записва изобщо нищо под 480 секунди. Ако подам кеша на файл всичко е перфектно и няма проблем, но под Memcched проблема си стои. Откакто имам поне поглед над ключовете, които реално се сторват на сървъра установих, че някои неща се кешират, а други с по-малко време не. Ларавел е мигриран от 5.7 до 8 и при всеки ъпдейт съм спазвал всичко описано от документацията.

https://laravel.com/docs/5.8/upgrade

Тук има промени по кеширането, но на практика просто трябва да минеш и ако си слагал 1 за една минутка, да го направиш 60 в секунди.
 
php което работия с мемкеша гледа ли неговия час?
Това което ти ползваш и това с кеша май бяха разлчини рнр-та
 
uphero каза:
php което работия с мемкеша гледа ли неговия час?
Това което ти ползваш и това с кеша май бяха разлчини рнр-та

Смисъл, дали времето на сървъра не е сверено ли?
 
Той най-вероятно говори за web и cli php, понеже те използват различни ini файлове(едно и също PHP но различни конфигурации), но не вярвам да имате включен memcached разширение за cli-а, а и когато се изпълнява през уеб-а си се използва уеб конфигурацията.

Имате някъде разлика във времената от 8 минути.

Код:
$ date

връща ли ти правилния час на сървъра (това е линукс команда)?

Също, това директно на сървъра ли тестваш или на локална работна среда? Въведи ни малко в обстановката, за да знаем възможностите ти какви са.

И последно, я пробвай да подадеш Carbon истанция за секундите. Не би трябвало да има разлика (според кода, който седи отзад)

Код:
now()->addSeconds(60)

Аз щях да тествам в нас, но бях зает и след това напълно забравих.
 
Здравей датата и часът на сървъра и в ларавел са ми наред. Директно в реална среда тествам. Пробвах с now()->addSeconds() но интересното е че под 450 не запаметява в кеш. Тоест големите заявки за голямо време ги помни, но тези които са примерно за 1 минутка не. Пробвах всичко, системния администратор беше с мен, всичко изтества и той, даже шелче за търсене на ключ ми извади но това е. Файловете работят, memcached не пълноценно...
 
Открих нещо много интересно.

Реших да извикам инстанцията на мемкеша на php и да тествам и сравнявам с нея.
Код:
 	dump($this->currentTime());
        $m = cache()->store('memcached')->getMemcached();
        $key = md5('test_123456');
        dd($m->add('admin_'.$key,'test',60))

Така всичко работи защото директно заобикалям ларавел store и казвам на php memcached класът да запази данните. С новата проверка по ключове от системния администратор всичко е ок. Кога се появява проблема?

Код:
 	dump($this->currentTime());
        $m = cache()->store('memcached')->getMemcached();
        $key = md5('test_123456');
        dd($m->add('admin_'.$key,'test',1618228060))

Ларавел подава директно таймстампа към функцията за add на мемкеша и съответно, това не сработва!!!

Ако приемем, че сегашното време е 1618228000 и подам 60 секунди отгоре = 1618228060 не сработва.
Ако подам време 1618229000 тогава се запаметява ключът с 1000 секунди за теста разлика.

Та въпроса ми е защо?

Този тест вади e с 60 секунди и не запаметява на рефреша нищо.
Код:
	dump(now());
        dump(exec('date'));
        dump($this->currentTime());
        dump($this->availableAt(60));
        $m = cache()->store('memcached')->getMemcached();
        $key = 'admin_1_'.md5('test_123456');
        dump($m->add($key,'test',$this->availableAt(60)));
        dd($m->get($key));

Capture.png


Този тест е с 500 секунди
Код:
dump(now());
        dump(exec('date'));
        dump($this->currentTime());
        dump($this->availableAt(500));
        $m = cache()->store('memcached')->getMemcached();
        $key = 'admin_1_'.md5('test_123456');
        dump($m->add($key,'test',$this->availableAt(500)));
        dd($m->get($key));
Capture.png

Capture.png
 
dakata__92 каза:
systemctl restart memcached

И работата заспа...

https://github.com/php-memcached-dev/php-memcached/issues/368

Това ми беше следващото предложение, но кой да натисне Submit. А защо след толкова време реши да го рестартираш?

Аз по принцип никога не тествам директно на сървъра, а на мойта си машина. Така мога да дебъгна като хората. Ако при мен работи, а не на сървъра, първо ще се убедя, че съм на един и същи бранч с този, който е деплойнат на live сървъра (случвало се е да не обърна внимание на кой бранч съм). Ако всичко е правилно, проверявам логове, ако няма логове за проверяване, рестарт на външния сървиз при положение, че знам, че само с него нещата се бъгват.

Въпроса е, че не мога да стигна до същото заключение, когато е през форума. Нещата са малко "развален телефон".
 
Revelation каза:
dakata__92 каза:
systemctl restart memcached

И работата заспа...

https://github.com/php-memcached-dev/php-memcached/issues/368

Това ми беше следващото предложение, но кой да натисне Submit. А защо след толкова време реши да го рестартираш?

Аз по принцип никога не тествам директно на сървъра, а на мойта си машина. Така мога да дебъгна като хората. Ако при мен работи, а не на сървъра, първо ще се убедя, че съм на един и същи бранч с този, който е деплойнат на live сървъра (случвало се е да не обърна внимание на кой бранч съм). Ако всичко е правилно, проверявам логове, ако няма логове за проверяване, рестарт на външния сървиз при положение, че знам, че само с него нещата се бъгват.

Въпроса е, че не мога да стигна до същото заключение, когато е през форума. Нещата са малко "развален телефон".
Здравей. Много ти благодаря за помощта! Нива на достъп и приоритети предрекоха мъките на този проблем. На практика се наложи доста да се помъча, докато подкарам всичко да е наред.
 

Горе