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

Apakah ada cara untuk membuat kunci tertentu ditemukan pada instance redis tertentu dalam mode cluster?

Anda bisa, tapi itu tidak sepele. Pertama-tama, Redis menggunakan kurung kurawal pada kunci untuk menentukan bagian pecahannya, sehingga Anda dapat memutuskan untuk memodifikasi kunci dan mengirimkannya ke pecahan sembarang.

Sekarang, Anda memerlukan dua hal:

  1. Peta shard atau rentang slot tempat redis instance berada.

  2. Cara untuk mengetahui string mana yang memetakan ke slot mana, sehingga Anda dapat memaksa "string sharding" pada kunci Anda untuk mengarahkannya ke shard tertentu.

Yang pertama mudah - CLUSTER SLOTS akan memberi Anda peta itu, urai saja.

Yang kedua lebih rumit - tapi untungnya saya sudah melakukan pekerjaan ini. Saya telah membuat tabel pemetaan string alfanumerik sesingkat mungkin ke masing-masing dari 16384 slot di cluster Redis. Saya menggunakan C tetapi Anda dapat dengan mudah mengubahnya menjadi apa pun. https://Gist.github.com/dvirsky/93f43277317f629bb06e858946416f7e

Jadi algoritme Anda adalah, dengan diberikan kunci dan simpul yang diinginkan:

  1. Lihat peta slot dan ambil rentang slot yang berada pada simpul tersebut.

  2. Pilih slot dalam jangkauan node itu.

  3. Lihat di tabel sharding untuk entri slot itu.

  4. Tampar string itu dengan kurung kurawal pada kuncinya. misalnya konversi foo untuk foo{e4x} .

Dan itu saja! Perintah apa pun yang menggunakan kunci ini akan dialihkan ke pecahan itu.

Versi pseudo-pythonnya:

# Build this table from CLUSTER SLOTS or CLUSTER NODES
slots = {
   '127.0.0.1:7000': [(0, 1045),(2000,2100)]
   ...
 }

# Build this table from the C example:
sharding_table = ["06S", "Qi", "5L5", "4Iu", "4gY", ....]

def retarget_key(key, node):
    ranges = slots[node] 

    sharding_key = shading_table[ranges[0][0]]
    return '%s{%s}' % (key, sharding_key)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Transaksi Redis &Skrip Lua yang Berjalan Lama

  2. Apa cara paling efisien waktu untuk membuat serial/deserialisasi DataTable ke/dari Redis?

  3. SpringBoot Elasticache JedisMovedDataException:PINDAH

  4. Jalankan redis dalam maraton (mesos) di bawah satu url

  5. Redis:Bagaimana cara memotong himpunan normal dengan himpunan yang diurutkan?