首页 > 解决方案 > REDIS 中的递归搜索

问题描述

在 ETCD 中,假设以下是键值对:

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

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

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

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

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

提前致谢。

标签: redisspring-data-redisetcdredis-cluster

解决方案


一种方法是使用散列和HSCAN对密钥进行模式匹配。

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

并且HSCAN具有返回键和值的优点。KEYS并且SCAN只返回键,然后您需要获取值。

> 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"

推荐阅读