Зависи дали смятате, че вашите IP диапазони могат да се припокриват или не. Ако не, решението е доста просто:
- използвайте колекция от хешове, за да съхранявате данни на доставчиците
- използвайте zset, за да индексирате максималната стойност на вашите диапазони
- извличане на (уникалния) диапазон, чиято максимална стойност е по-голяма от IP
- проверете дали минималната стойност на този диапазон е по-ниска от IP
Пример:
Ето моите доставчици. Всеки от тях се идентифицира с идентификатор. Моля, имайте предвид, че мога да добавя още свойства, прикрепени към всеки доставчик:
> hmset providers:1 name P1 min 3232235786 max 3232235826
OK
> hmset providers:2 name P3 min 1232235786 max 1232235826
OK
> hmset providers:3 name P3 min 2232235786 max 2232235826
OK
> hmset providers:4 name P4 min 4232235786 max 4232235826
OK
Всеки път, когато в системата се добави доставчик, трябва да се поддържа индекс (ръчно:това е Redis, а не релационна база данни). Резултатът е максималната стойност, членът е идентификаторът на диапазона.
> zadd providers:index 3232235826 1 1232235826 2 2232235826 3 4232235826 4
(integer) 4
> zrange providers:index 0 -1
1) "2"
2) "3"
3) "1"
4) "4"
Сега, за да направите заявка за уникалния диапазон, съответстващ на IP адрес, имате нужда от 2 двупосочни пътувания:
> zrangebyscore providers:index 3232235787 +inf LIMIT 0 1
1) "1"
> hgetall providers:1
1) "name"
2) "P1"
3) "min"
4) "3232235786"
5) "max"
6) "3232235826"
След това клиентската програма просто трябва да провери дали вашият IP е по-голям или равен от минималния адрес на върнатия диапазон.
Сега, ако смятате, че диапазоните могат да се припокриват, решението е много по-сложно и вече е обяснено тук.