Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

simpan rentang ip di Redis

Itu tergantung apakah Anda menganggap rentang IP Anda dapat tumpang tindih atau tidak. Jika tidak, solusinya cukup sederhana:

  • menggunakan kumpulan hash untuk menyimpan data penyedia
  • gunakan zset untuk mengindeks nilai maksimal rentang Anda
  • mengambil rentang (unik) yang nilai maksimalnya lebih besar dari IP
  • periksa nilai min rentang ini lebih rendah dari IP

Contoh:

Berikut adalah penyedia saya. Masing-masing diidentifikasi dengan id. Harap diperhatikan bahwa saya dapat menambahkan lebih banyak properti yang dilampirkan ke setiap penyedia:

> 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

Setiap kali penyedia ditambahkan ke dalam sistem, indeks harus dipertahankan (secara manual:ini adalah Redis, bukan database relasional). Skor adalah nilai maksimal, anggota adalah id rentang.

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

Sekarang untuk menanyakan rentang unik yang sesuai dengan alamat IP, Anda memerlukan 2 perjalanan pulang pergi:

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

Kemudian program klien hanya perlu memeriksa apakah IP Anda lebih besar atau sama dengan alamat minimum dari rentang yang dikembalikan.

Sekarang, jika Anda menganggap rentang dapat tumpang tindih, solusinya jauh lebih kompleks, dan itu telah dijelaskan di sini.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Catbox-redis menunjukkan kesalahan terputus pada aplikasi hapijs saya

  2. StackExchange.Redis - Penggunaan LockTake / LockRelease

  3. pengecualian bersarang adalah redis.clients.jedis.exceptions.JedisConnectionException:Tidak bisa mendapatkan sumber daya dari kumpulan

  4. Redis - Apa, Mengapa, dan Bagaimana menggunakan Redis sebagai basis data utama

  5. Saya mendapatkan kesalahan Kelas 'Predis\Client' tidak ditemukan di Laravel 5.2