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:
-
Peta shard atau rentang slot tempat redis instance berada.
-
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:
-
Lihat peta slot dan ambil rentang slot yang berada pada simpul tersebut.
-
Pilih slot dalam jangkauan node itu.
-
Lihat di tabel sharding untuk entri slot itu.
-
Tampar string itu dengan kurung kurawal pada kuncinya. misalnya konversi
foo
untukfoo{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)