как получить данные predis со смещением и пределом?

я сохранил свои данные в виде закодированных данных в Redis, используя библиотеку predis hset. поэтому данные хранятся в одной из баз данных с хэш-именем, например, myHash

field = integer
value = encoded data..

e.g

1    {'pk_id':1,'name' : 'test1'}
2    {'pk_id':2,'name' : 'test2'}
3    {'pk_id':3,'name' : 'test3'}
...and so on...

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

$predisObj->hgetall('myHash');

вытаскивает все и браузер вылетает из-за слишком большого количества данных


person sasori    schedule 03.07.2018    source источник


Ответы (1)


predis разделяет список команд с Redis, поскольку это php-интерфейс для хранилища Redis. Поэтому вы можете использовать стандартные команды Redis для удовлетворения ваших потребностей:

Лучший способ добиться того, чего вы хотите, — команда SCAN From predis документация:

// === Keyspace iterator based on SCAN ===
echo 'Scan the keyspace matching only our prefixed keys:', PHP_EOL;
foreach (new Iterator\Keyspace($client, 'predis:*') as $key) {
    echo " - $key", PHP_EOL;
}

Эта команда вернет итератор, поэтому проблемы с памятью больше не будут иметь значения.

person Simas Joneliunas    schedule 03.07.2018
comment
каково значение этой переменной $client в вашем фрагменте кода? это должен быть мой объект predis ?, и должен ли этот параметр predis: * быть таким? или мне пришлось изменить его на свое хеш-имя? - person sasori; 03.07.2018
comment
код взят из ссылки на документацию. таким образом: $client = new Predis\Client($single_server, array('profile' => '2.8')); predis:* должен быть вашим запросом. Вы можете узнать больше на (github.com /nrk/predis/blob/v1.1.1/examples/) - person Simas Joneliunas; 03.07.2018
comment
когда я передаю ($ client, 'myHash'), я получаю это сообщение Message: WRONGTYPE Operation against a key holding the wrong kind of value .... какой тип он искал? , мои данные в этом redis db представляют собой поле и закодированные данные - person sasori; 03.07.2018
comment
Кажется, это несоответствие типа данных/операции. Я раньше не сталкивался с такой ошибкой, но быстрый поиск в Интернете дал мне следующее: github.com/antrez/redis/issues/2864#issuecomment-156057011 Может быть, это поможет вам здесь. - person Simas Joneliunas; 03.07.2018
comment
отлично, я использовал type myHash в командной строке, и это хеш.. я использовал итератор HashKey... теперь проблема в том, что он все еще падает... где я должен передать смещение и ограничение... чтобы избежать большого количества данных ? - person sasori; 03.07.2018