Рекурсивный поиск в REDIS - PullRequest
       35

Рекурсивный поиск в REDIS

1 голос
/ 13 января 2020

В ETCD, скажем, следующие пары ключ-значение:

company / google / employee / employee1 employeeID1

company / google / employee / employee2 employeeID2

company / amazon / сотрудники / employee1 employeeID1

компания / amazon / employee / employee2 employeeID2

Когда я выполняю выборку для "company / amazon /", я получаю идентификаторы всех сотрудников в amazon (то же самое относится и к «company / google /»), а выборка «company /» выбирает все идентификаторы сотрудников. Поддерживается ли это в REDIS? Если нет, как мы можем сделать то же самое?

Заранее спасибо.

1 Ответ

1 голос
/ 13 января 2020

Один из способов сделать это - использовать га sh и HSCAN для сопоставления с образцом ключа.

Один га sh со всеми вашими данными инкапсулирует сканирование в только соответствующие ключи, а не все ключи в базе данных.

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