【问题标题】:how to get predis data with offset and limit?如何获取带有偏移量和限制的predis数据?
【发布时间】:2018-07-03 00:35:11
【问题描述】:

我使用 predis hset 库将我的数据作为编码数据存储在 redis 中。 因此数据以哈希名称存储在其中一个数据库中,例如 myHash

field = integer
value = encoded data..

例如

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

大约有 400k+ 行整数字段及其编码数据。 有没有办法用偏移量和限制来提取这些数据? 因为如果我这样做,例如

$predisObj->hgetall('myHash');

它会拉出所有内容,并且由于数据过多而导致浏览器崩溃

【问题讨论】:

    标签: php redis predis


    【解决方案1】:

    predis 与 redis 共享命令列表,因为它是 redis 存储的 php 接口。因此,您可以使用标准的 redis 命令来满足您的需求:

    实现你想要的最好方法是SCAN command 来自predisdocumentation

    // === 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;
    }
    

    此命令将返回一个迭代器,因此内存问题将不再重要。

    【讨论】:

    • 你的代码 sn-p 中那个 $client var 的值是多少?它应该是我的 predis 对象吗? 'predis:*' 参数应该是这样吗?或者我必须用我的哈希名称更改它?
    • 代码取自文档链接。因此:$client = new Predis\Client($single_server, array('profile' => '2.8')); predis:* 应该是您的查询。您可以在 (github.com/nrk/predis/blob/v1.1.1/examples/…) 了解更多信息
    • 当我通过 ($client, 'myHash') 我收到这条消息Message: WRONGTYPE Operation against a key holding the wrong kind of value ....它在寻找什么类型? ,我在那个redis db中的数据是字段和编码数据
    • 看来是数据/操作类型不匹配。我以前没有遇到过这样的错误,但是在互联网上快速浏览一下给了我这个:github.com/antirez/redis/issues/2864#issuecomment-156057011也许它可以从这里帮助你。
    • 太好了,我在命令行中使用了type myHash,它是一个哈希值..我使用了 HashKey 迭代器...现在的问题是,它仍然崩溃..我应该在哪里通过偏移量和限制..避免太多数据?
    猜你喜欢
    • 2020-05-26
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2014-08-26
    • 2016-06-09
    • 2017-04-14
    • 2012-03-14
    相关资源
    最近更新 更多