Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
use Redis;
$redis = Redis::connection();
получаю
Call to undefined method Redis::connection()
но если указать
use Illuminate\Support\Facades\Redis;
то все работает, и самое интересное в алиасах
'Redis' => Illuminate\Support\Facades\Redis::class,
есть такая запись.
в чем логика?
Изменено adams (13.09.2017 13:29:14)
Не в сети
Cache с драйвером redis тебе не подходит?
Попробуй
php artisan config:clear
Не в сети
Cache с драйвером redis тебе не подходит?
немного не понял если честно...
делал и так
php artisan clear-compiled; php artisan auth:clear-resets; php artisan cache:clear; php artisan config:clear; php artisan debugbar:clear; php artisan route:clear; php artisan view:clear; php artisan optimize
но ничего не выходит
Не в сети
немного не понял если честно...
https://laravel.com/docs/5.5/cache#cache-usage
Пункт Accessing Multiple Cache Stores
Не в сети
хм интересно..я правильно понял, что нужно сперва
$redis= Cache::store('redis'); сделать некий конекшенс
а потом я уже могу плясать как хочу?
ну проверять значения, вытаскивать и тп
пс нашел
https://laravel.com/docs/5.5/redis#configuration у них в примере тоже указано
use Illuminate\Support\Facades\Redis;
и еще один вопрос: есть ли разница в использовании?
Изменено adams (14.09.2017 01:41:29)
Не в сети
и еще один вопрос: есть ли разница в использовании?
я тоже наступал на эти грабли. если установлено расширение пхп php-redis, оно создаёт в корневом неймспейсе свой класс Redis и после этого через корень обращаться к фасаду как \Redis становится нельзя – класс к моменту обращения уже существует. и на нём естественно нет тех методов, которые использует ларавель. вообще все фасады лучше всего подключать через Illuminate\Support\Facades – неизвестно какие ещё расширения и сторонние библиотеки могут в корень чего-то насовать, что будет конфликтовать с ларавелем
да, и ещё – для работы с редисом в ларавеле расширение php-redis устанавливать не нужно! у редиса простой текстовый протокол и пакет predis/predis не использует никаких расширений. в продакшене опционально можно собрать пакет php-pecl-iredis, он чуть-чуть ускоряет работу в случаях когда присутствует большой трафик запросов в редис – но и он полностью опционален
Не в сети
и еще один вопрос: есть ли разница в использовании?
Есть.
Используя Cache класс ларавела не получится использовать уникальные фичи Redis, например RPUSH
https://redis.io/commands/rpush
Если тебе от кэша нужны только ключи и тэги - используй класс Cache.
хм интересно..я правильно понял, что нужно сперва $redis= Cache::store('redis'); сделать некий конекшенса потом я уже могу плясать как хочу?
Достаточно просто в cache.php установить driver => redis
Тогда кэш редиса будет использоваться по умолчанию.
Не в сети
Достаточно просто в cache.php установить driver => redis
лучше в .env указать CACHE_DRIVER=redis
Не в сети
Мне нужно создавать ключ на сутки и постоянно делать инкремент если было обращение.
И я так понимаю я могу удалить "predis/predis": "^1.1", из компосера?
И просто сделать в контроллере
Cache::store('redis');
Затем
if(... && !Cache::has('key')){
Cache::put('key', 'value', $expiresAt);
}
и еще ниже
if(...){
$tmp = Cache::increment('key');
}
Я правильно понял смысл работы с кешем?
Не в сети
без predis/predis не будет работать кэш в редисе и сессии в редисе тоже. какие именно данные где кэшировать это нужно решать уже в конкретных местах
писать if (!Cache::has('key')){ Cache::put(…); } не надо, для этого уже есть Cache::remember(…), и вообще лучше бы для начала почитать раздел документации по кэшу, там всё очень просто…
для Cache::increment() также не нужно заранее добавлять значение в кэш, если его нет, редис считает что оно равно нулю и ноль вполне нормально инкрементируется безо всяких проверок…
Не в сети
Да так работает, но в компосере пришлось оставить "predis/predis": "^1.1", иначе ругался ларавел...
Не в сети
НУ у меня по логика так, или как тогда сделать
напрмер часть условия идет и если еще не создан такой ключ то только тогда создать его в кеше...
а ниже нужно проверять опять же значение, пока условие выполняется до тех пор и нужно увеличивать значение
Не в сети
$imps_by_ip = Cache::remember($visitor_ip.$TagsGroup->id, $expire, function () {return 0;});
$imps = Cache::remember('g_'.$TagsGroup->id, $expire, function () {return 0;});
Вот так? т.е забираю значение из кеша если его нет то вернуть 0
и второе значение время жизни так?
мне нужно устанавливать счетчик на нужное мне время которое вычисляется выше....
а ниже у меня
if($TagsGroup->impressions_limit_ip > $imps_by_ip){
$imps_by_ip = Cache::increment($visitor_ip.$TagsGroup->id);
}
if($TagsGroup->impressions_limit > $imps){
$imps = Cache::increment('g_'.$TagsGroup->id);
}
Только я не понял, ремембер закеширует мне значение 0 на это время что укажу? не нашел просто
https://laravel.com/docs/5.5/cache#cache-usage
и значение которое потом увеличивается так же будет жить тот же промежуток времени который был указан в ремембер?!
Изменено adams (14.09.2017 14:01:12)
Не в сети
Правда пришлось переделать время жизни
$expire = Carbon::now()->timestamp(strtotime('tomorrow'));
Изменено adams (14.09.2017 15:20:24)
Не в сети
Страницы 1