php + Redis

ivanov77

Новичок
Приветствую.
А через какую либу обычно принято работать с Redis?
Смотрю phpredis/phpredis , которая модулем php подключается, там доки, команды по управлению базой.
Но встречаю еще nrk/predis часто упоминается и он мол не требует расширений, а как пакет композера поставится, но там в доках только про админские всякие вещи и ничего про управление содержимым.
Вот и думаю часто требуют Redis в вакансиях, а с каким апи придется работать непонятно.
 

AmdY

Пью пиво
Команда форума
@grigori правильно говорит, надо знать сам редис, а с либой за час можно разобраться.
 

ivanov77

Новичок
В первом расширении есть обертки для многих этих команд да и есть возможность выполнять любую команду
$redis->rawCommand(...)
Но думаю для задач сайта в редисе кеши в основном хранить, ну и сессии, раз встроена возможность, для этого вряд ли много потребуется команд.
Строку/АссоцМассив хранить/доставать/удалять по ключу.
Время жизни выставлять, тоже прикольно.
 

ivanov77

Новичок
@grigori правильно говорит, надо знать сам редис, а с либой за час можно разобраться.
Ну вот и смысл полноценно его изучать если для задач реально будет использоваться десяток команд.
Он же как вспомогательный инструмент в основном идет
 

AmdY

Пью пиво
Команда форума
Ну вот и смысл полноценно его изучать если для задач реально будет использоваться десяток команд.
Он же как вспомогательный инструмент в основном идет
Потому что прочитать доку это час времени, а потом это экономит на порядки больше. От тебя не требуют экспертных знаний.
 

AmdY

Пью пиво
Команда форума
Например в symfony ты не работаешь напрямую с редисом и низкоуровневыми либами вокруг него, а используешь какой-нибудь SncRedisBundle
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да без разницы, чем пользоваться
если в проекте fpm, известен baseline, и могу добавить расширение PhpRedis в образ - так и делаю https://hub.docker.com/r/grigori/phpextensions/tags/
если в проекте react - юзаю его драйвер
если конфигурация php мне не подконтрольна - берется Predis, или драйвер симфони-ларавеля-уи-чего там еще
 
Последнее редактирование:

ivanov77

Новичок
Ожидал ведь первоначально неизвестно что, например чтобы напрямую ассоциативный php массив, или даже объект сохранить по ключу там.
Но по либам понял что работа с редис идет по сути как раньше вручную с mysql_query('sql команда') ,его командами, всем спасибо.

А потом чувак жалуется, что его кроме говноджуновских вакансий никуда не зовут.
Напрягло что я про вещи из мира php интересуюсь на этом форуме, а не про курение в подъезде спросил?
На второй то вопрос ты готов давать содержательный ответ...
 

ivanov77

Новичок
Интересно было услышать выше про нет разницы, но практикум не подтвердил эту мысль.
Например простая задача сохранения и извлечения ассоциативного php массива из базы
с помощью phpredis
Код:
    $array = [
       'a' => '123',
       'b' => '456',
   ];
   $redis->delete('php_array');
   $redis->hMset('php_array', $array);   
   $var = $redis->hGetAll('php_array');
   var_dump($var);
// выдаст готовый рез-т
array (size=2)
  'a' => string '123' (length=3)
  'b' => string '456' (length=3)
А на том же yii2-redis оберток нет никаких, работаем в формате
Код:
$redis = Yii::$app->redis;
$redis->del('yii2_array');
$redis->hmset('yii2_array', 'a', '123', 'b', '345');
$var = $redis->hgetall('yii2_array');
var_dump($var);
// И результат
array (size=4)
  0 => string 'a' (length=1)
  1 => string '123' (length=3)
  2 => string 'b' (length=1)
  3 => string '345' (length=3)
Т.е. чтобы сохранять/получать как в первом случае еще требуется поработать, ладно с call_user_func_array все понятно, а ф-ции преобразования массивов сходу не нашел, значит foreach, и это все только для одного юзкейса, а это тоже код, который надо кому то поддерживать.
 

Adelf

Administrator
Команда форума
ассоциативный массив в редис сохраняется тупо по SET. и берется по GET. Разумеется с сериализацией.. или json_encode как кому нужно.
Работая с редисом очень важно понимать где какую структуру юзать. иначе он больше проблем только доставит, чем пользы принесет.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
итак, ТС проверил тезис, что при доступности расширения можно взять расширение, а без расширения можно работать через драйвер фреймворка, и пришел к тем же выводам

отлично, теперь приступай к реализации несложной реальной задачи
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
У меня вопрос другой.
Кто-то пробовал хотя бы лабораторно потоки из 5го редиса?
Очень вкусно выглядит: pub/sub с возможностью догнать при падении.
 
Сверху