Redis
 sql >> база данни >  >> NoSQL >> Redis

съхранявайте IP диапазони в Redis

Зависи дали смятате, че вашите 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 е по-голям или равен от минималния адрес на върнатия диапазон.

Сега, ако смятате, че диапазоните могат да се припокриват, решението е много по-сложно и вече е обяснено тук.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis - Повишаване на подчинен към главен ръчно

  2. Как да мигрирате Redis™ данни с помощта на Redis-Shake

  3. Как да стартирам анализ на паметта на AWS ElastiCache?

  4. Rdbtools в Redis Conf18

  5. Как да преместя база данни Redis от един сървър на друг?