php - php Redis::hscan使用通配符名称和条件检索所有哈希

标签 php laravel redis predis

因此,我有一堆哈希,名称如下:

state:city:street

在每一个内部都类似:
signId => 10,
damaged => 1

我本质上是想做一些我不确定是否可行的诡计。

我想获取signId的所有值,但仅当signId条目存在但damaged条目不存在时...

对于所有属于通配符state:city:*的哈希

所有这些都在PHP / Laravel / Predis中

最佳答案

没有内置功能或功能可在redis中进行。我不建议您在生产中使用keys。如redis documentation所述;

keys should be used in production environment with extreme care. It may ruin performance when it is executed against large databases.



我将推荐三个选项;
  • scankeys的更好替代方案,因为它不会长时间阻塞服务器。在应用程序级别,您可以执行与您的模式匹配的哈希键,然后两次使用HGET(O(1))进行比较。如果您的哈希键没有很多字段,那么HGETALL也是另一个选择。
  • 另一个选项是在单独的集合/列表中跟踪与某个模式匹配的哈希键。每当您调用HMSETHSET时,您也要在集合/列表中按该键。通过跟踪键,您以后不再需要使用scan。您可能只是以分页的方式获取它们以执行相关的哈希命令。作为推荐之一,这还需要应用程序级查询而不是数据层查询。
  • 由于您需要查询多个条件,因此最好将它们保存在关系数据库(PostgreSQL,mysql等)中。 Redis可以很好地服务于哈希,但是当您需要以查询方式查询哈希时,最好对数据进行重新建模。
  • 关于php - php Redis::hscan使用通配符名称和条件检索所有哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61495620/

    相关文章:

    javascript - wordpress 和 wp_query 中的 ajax

    php - 空格自动添加输入php

    PHP:如何在redis中缓存大表?

    redis - redis集群需要AOF还是RDB?

    php - 检查 PHP mysql 查询字段中的逗号分隔值

    php - jQuery ajax 响应后重新绑定(bind)动态创建的表单

    php - OpenID : Which one I should use to index a user "openid_identity" or "openid_claimed_id"?

    Laravel 查询生成器结果到嵌套集合

    php - 删除重复的记录,保留id较低的记录

    redis - 如何使用hset将数据存储在redis集群中的不同节点?例如。 hset 用户名1 aa 用户名2 bb