redis - REDIS 中的递归搜索
问题描述
在 ETCD 中,假设以下是键值对:
公司/谷歌/员工/员工 1 员工 ID1
公司/谷歌/员工/员工 2 员工 ID2
公司/亚马逊/员工/员工 1 员工 ID1
公司/亚马逊/员工/员工 2 员工 ID2
当我在“company/amazon/”上进行 Fetch 时,我会获取 amazon 中所有员工的员工 ID(同样适用于“company/google/”),而在“company/”上的 fetch 会获取所有员工 ID。REDIS 是否支持此功能?如果没有,我们怎么能做同样的事情?
提前致谢。
解决方案
一种方法是使用散列和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"
推荐阅读
- react-router - 道具对象为空,history.push
- time - 假设我们有 n 个整数,其值范围从 0 到 n^5 -1。使用基数排序对这些数字进行排序的算法复杂度是多少?
- c# - 模拟函数在 C# 单元测试中不抛出异常
- sabre - 如何使用sabre应用的促销代码搜索和预订票价?
- python-3.x - 有没有办法使用 while 循环函数作为列表跟踪器?并与 FileI/O 混合?
- javascript - React 事件源未关闭
- python - Kv 语言中的多行文本
- python-3.x - DigitalRoot 的时间复杂度是多少?
- r - 我们可以在 R 中组合 2 个过滤器吗?
- javascript - 具有多个元素的数组过滤器