LINUX.ORG.RU

php redis keys

 , ,


0

1

Здравствуйте, много перечитала, но так и не нашла способ вывести по шаблону ограниченное число ключей

$redis->keys('*');

как вы делаете по страничную навигацию используя редис?


А не нужно делать keys *, даже в документации это делать не рекомендуют. Используй более подходящие типы данных redis.

maxcom ★★★★★
()
Ответ на: комментарий от maxcom

нечего не поняла ) маску * я для примера вставила, там $redis->keys('article:*'.$_GET['search'].'*') и потом получаю ключ и затем $redis->hgetall($key);

все работает отлично, за исключением того что постраничную напигацию не удается сделать таким образом

jessgt
() автор топика
Ответ на: комментарий от jessgt

не важно, KEYS не для production, это отладочная команда. Положи ключи в список в нужном тебе порядке и делай из него выборки.

maxcom ★★★★★
()
Ответ на: комментарий от maxcom

Вот так я сейчас уже как пол года где-то добавляю $id = ($redis->sCard('article'))+1; $redis->set('article:title:id:'.$id.':hello world',null); $redis->hmset('article:id:'.$id, [time(), 'hello world', 'userid']); $redis->sAdd('article',$id);

А делала поиск таким образом $keys = $redis->keys('article:*'.$_GET['search'].'*');

И правильно ли я поняла, чтоб осуществить поиск с постраничной навигацией придется не только поиск, но и добавление переделывать? и из-за чего лишусь всех имеющихся статей?

jessgt
() автор топика
Ответ на: комментарий от Deleted

Я пробовала https://github.com/phpredis/phpredis#scan

$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
while($keys = $redis->scan($it,'article:*'.$_GET['search'].'*'))
...
Работает, но если привести к виду
$redis->scan($it,'article:*'.$_GET['search'].'*',25)
...
Где в ожидание того что на экран будет выведено 25 статей, но не тут то было, воводит все которые совпадают с маской, а если удалить строку
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
То тогда выводит не 25, а 3 статья почему то

jessgt
() автор топика
Ответ на: комментарий от jessgt

читай доку редиса со строк:

Basically with COUNT the user specified the amount of work that should be done at every call in order to retrieve elements from the collection. This is just an hint for the implementation, however generally speaking this is what you could expect most of the times from the implementation.

иными словами count - не гарантирует что размер будет именно таким, потому для строго пейджинга придется еще дорабатывать

ну а разница в том что scan менее «опасен» для производительности чем keys

Deleted
()
Ответ на: комментарий от Deleted

Прошу прощения, но с английским у меня очень плохо.

Выведу я например 25 статей, а как остальные 25 тогда вывести, я что-то не могу найти?

jessgt
() автор топика

sorted sets + zrange
а вообще, выбирать под такую задачу редис весьма странно.

upd: а, стоп. поиск же. ну, (z)scan и напильник. но в целом ничего хорошего из этого не выйдет, потому что scan не умеет стартовать с произвольной позиции. так что выбирать все, и ручками делить.

iSage ★★★★
()
Последнее исправление: iSage (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.