【问题标题】:Recursive search in REDISREDIS 中的递归搜索
【发布时间】:2020-04-30 00:05:19
【问题描述】:

在 ETCD 中,说下面是键值对:

公司/谷歌/员工/员工1 员工 ID1

公司/谷歌/员工/员工2 员工ID2

公司/亚马逊/员工/员工1 员工 ID1

公司/亚马逊/员工/员工2 员工ID2

当我在“company/amazon/”上进行 Fetch 时,我会获取 amazon 中所有员工的员工 ID(同样适用于“company/google/”),而在“company/”上的 fetch 会获取所有员工身份证。 REDIS 是否支持此功能?如果没有,我们怎么能做同样的事情?

提前致谢。

【问题讨论】:

    标签: redis spring-data-redis etcd redis-cluster


    【解决方案1】:

    一种方法是使用哈希和HSCAN 对键进行模式匹配。

    包含所有数据的哈希将扫描仅封装到相关键,而不是数据库上的所有键。

    HSCAN 的优势在于它返回键和值。 KEYSSCAN 只返回键,然后您需要获取值。

    > HSET myData company/google/employees/employee1 employeeID1
    (integer) 1
    > HSET myData company/google/employees/employee2 employeeID2
    (integer) 1
    > HSET myData company/amazon/employees/employee1 employeeID1
    (integer) 1
    > HSET myData company/amazon/employees/employee2 employeeID2
    (integer) 1
    > HSCAN myData 0 MATCH company/amazon/* COUNT 100
    1) "0"
    2) 1) "company/amazon/employees/employee1"
       2) "employeeID1"
       3) "company/amazon/employees/employee2"
       4) "employeeID2"
    > HSCAN myData 0 MATCH company/google/* COUNT 100
    1) "0"
    2) 1) "company/google/employees/employee1"
       2) "employeeID1"
       3) "company/google/employees/employee2"
       4) "employeeID2"
    > HSCAN myData 0 MATCH company/* COUNT 100
    1) "0"
    2) 1) "company/google/employees/employee1"
       2) "employeeID1"
       3) "company/google/employees/employee2"
       4) "employeeID2"
       5) "company/amazon/employees/employee1"
       6) "employeeID1"
       7) "company/amazon/employees/employee2"
       8) "employeeID2"
    

    【讨论】:

    • 非常感谢。而不是传递任何整数进行计数,有什么办法,我可以得到所有的字段和值,或者说计数是“全部”
    • 如果省略count,它将使用10。最大值为9223372036854775807,但请谨慎使用。扫描的目的正是为了避免长时间阻塞服务器。您应该使用合适的数字,并使用返回的光标继续扫描。
    猜你喜欢
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2015-09-02
    相关资源
    最近更新 更多