Redis
 sql >> Baza danych >  >> NoSQL >> Redis

przechowuj zakresy adresów IP w Redis

Zależy to od tego, czy uważasz, że zakresy adresów IP mogą się nakładać, czy nie. Jeśli nie, rozwiązanie jest dość proste:

  • użyj zbioru skrótów do przechowywania danych dostawców
  • użyj zset do indeksowania maksymalnej wartości swoich zakresów
  • pobierz (unikalny) zakres, którego maksymalna wartość jest większa niż adres IP
  • sprawdź, czy minimalna wartość tego zakresu jest niższa niż adres IP

Przykład:

Oto moi dostawcy. Każdy z nich oznaczony jest identyfikatorem. Pamiętaj, że mogę dodać więcej właściwości dołączonych do każdego dostawcy:

> 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

Za każdym razem, gdy dostawca jest dodawany do systemu, indeks musi być utrzymywany (ręcznie:jest to Redis, a nie relacyjna baza danych). Wynik to maksymalna wartość, członek to identyfikator zakresu.

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

Teraz, aby zapytać o unikalny zakres odpowiadający adresowi IP, potrzebujesz 2 połączeń w obie strony:

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

Następnie program klienta musi tylko sprawdzić, czy Twój adres IP jest większy lub równy minimalnemu adresowi zwróconego zakresu.

Teraz, jeśli weźmiesz pod uwagę, że zakresy mogą się nakładać, rozwiązanie jest znacznie bardziej złożone i zostało to już wyjaśnione tutaj.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kolejka Redis z wygaśnięciem roszczenia

  2. Buforowanie w Django z Redis

  3. Sesja NodeJS + ExpressJS + RedisStore jest niezdefiniowana

  4. Koncepcja Redis:w pamięci czy w DB?

  5. Jak uzyskać wiele wartości list w jednym wywołaniu w RedisTemplate klienta Jedis?