Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 13.09.2017 13:17:31

Вопрос про редис и ларавел

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)

Не в сети

#2 13.09.2017 19:36:58

Re: Вопрос про редис и ларавел

Cache с драйвером redis тебе не подходит?
Попробуй
php artisan config:clear

Не в сети

#3 13.09.2017 21:32:45

Re: Вопрос про редис и ларавел

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

но ничего не выходит

Не в сети

#4 13.09.2017 22:17:25

Re: Вопрос про редис и ларавел

немного не понял если честно...

https://laravel.com/docs/5.5/cache#cache-usage
Пункт Accessing Multiple Cache Stores

Не в сети

#5 14.09.2017 01:38:32

Re: Вопрос про редис и ларавел

хм интересно..я правильно понял, что нужно сперва

$redis= Cache::store('redis'); сделать некий конекшенс

а потом я уже могу плясать как хочу?
ну проверять значения, вытаскивать и тп

пс нашел

https://laravel.com/docs/5.5/redis#configuration у них в примере тоже указано

use Illuminate\Support\Facades\Redis;

и еще один вопрос: есть ли разница в использовании?

Изменено adams (14.09.2017 01:41:29)

Не в сети

#6 14.09.2017 12:03:16

Re: Вопрос про редис и ларавел

и еще один вопрос: есть ли разница в использовании?

я тоже наступал на эти грабли. если установлено расширение пхп php-redis, оно создаёт в корневом неймспейсе свой класс Redis и после этого через корень обращаться к фасаду как \Redis становится нельзя – класс к моменту обращения уже существует. и на нём естественно нет тех методов, которые использует ларавель. вообще все фасады лучше всего подключать через Illuminate\Support\Facades – неизвестно какие ещё расширения и сторонние библиотеки могут в корень чего-то насовать, что будет конфликтовать с ларавелем

да, и ещё – для работы с редисом в ларавеле расширение php-redis устанавливать не нужно! у редиса простой текстовый протокол и пакет predis/predis не использует никаких расширений. в продакшене опционально можно собрать пакет php-pecl-iredis, он чуть-чуть ускоряет работу в случаях когда присутствует большой трафик запросов в редис – но и он полностью опционален

Не в сети

#7 14.09.2017 12:06:31

Re: Вопрос про редис и ларавел

и еще один вопрос: есть ли разница в использовании?

Есть.
Используя Cache класс ларавела не получится использовать уникальные фичи Redis, например RPUSH
https://redis.io/commands/rpush

Если тебе от кэша нужны только ключи и тэги - используй класс Cache.

хм интересно..я правильно понял, что нужно сперва $redis= Cache::store('redis'); сделать некий конекшенса потом я уже могу плясать как хочу?

Достаточно просто в cache.php установить driver => redis
Тогда кэш редиса будет использоваться по умолчанию.

Не в сети

#8 14.09.2017 12:07:11

Re: Вопрос про редис и ларавел

Достаточно просто в cache.php установить driver => redis

лучше в .env указать CACHE_DRIVER=redis

Не в сети

#9 14.09.2017 13:15:12

Re: Вопрос про редис и ларавел

Мне нужно создавать ключ на сутки и постоянно делать инкремент если было обращение.
И я так понимаю я могу удалить "predis/predis": "^1.1", из компосера?
И просто сделать в контроллере

Cache::store('redis');

Затем

if(... && !Cache::has('key')){
  Cache::put('key', 'value', $expiresAt);
}

и еще ниже

if(...){
  $tmp = Cache::increment('key');
}

Я правильно понял смысл работы с кешем?

Не в сети

#10 14.09.2017 13:19:45

Re: Вопрос про редис и ларавел

без predis/predis не будет работать кэш в редисе и сессии в редисе тоже. какие именно данные где кэшировать это нужно решать уже в конкретных местах

писать if (!Cache::has('key')){ Cache::put(…); } не надо, для этого уже есть Cache::remember(…), и вообще лучше бы для начала почитать раздел документации по кэшу, там всё очень просто…

для Cache::increment() также не нужно заранее добавлять значение в кэш, если его нет, редис считает что оно равно нулю и ноль вполне нормально инкрементируется безо всяких проверок…

Не в сети

#11 14.09.2017 13:45:37

Re: Вопрос про редис и ларавел

Да так работает, но в компосере пришлось оставить "predis/predis": "^1.1", иначе ругался ларавел...

Не в сети

#12 14.09.2017 13:47:58

Re: Вопрос про редис и ларавел

НУ у меня по логика так, или как тогда сделать

напрмер часть условия идет и если еще не создан такой ключ то только тогда создать его в кеше...

а ниже нужно проверять опять же значение, пока условие выполняется до тех пор и нужно увеличивать значение

Не в сети

#13 14.09.2017 13:56:05

Re: Вопрос про редис и ларавел

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

Не в сети

#14 14.09.2017 15:18:29

Re: Вопрос про редис и ларавел

Правда пришлось переделать время жизни

$expire = Carbon::now()->timestamp(strtotime('tomorrow'));

Изменено adams (14.09.2017 15:20:24)

Не в сети

Подвал раздела