TairString, yerel Redis dizelerine sürüm numarası desteği ekleyerek iyimser kilitleme ve sınırlı artırma işlemlerini etkinleştirir.
Genel bakış
Yerel Redis dizeleri bir anahtar-değer çifti saklar. TairString her anahtara bir sürüm numarası ekler; bu sayede harici koordinasyona gerek kalmadan çakışma tespiti için hafif bir mekanizma sunar. Başarılı olan her yazma işlemi sürümü 1 artırır; yanlış sürüm belirten bir yazma isteği ise reddedilir.
TairString ayrıca EXINCRBY ve EXINCRBYFLOAT komutlarında minimum veya maksimum sınır belirlemenize olanak tanır. Bir artırma işlemi değeri bu aralığın dışına taşıracaksa komut, aralık dışı değeri yazmak yerine hata döndürür.
Temel yetenekler
Her TairString anahtarı, değerin yanında bir sürüm numarası taşır.
EXSET ve EXINCRBY, anahtarı en son okuduğunuzdan beri sürüm değiştiyse yazmayı reddeden bir
VERseçeneğini kabul eder; bu sayede ayrı bir işlem olmadan karşılaştır-ve-ayarla (compare-and-set) uygulanır.EXINCRBY ve EXINCRBYFLOAT, sayacı tanımlı bir aralıkta sınırlayan
MINveMAXseçeneklerini destekler.
Bu modül açık kaynaklıdır. Daha fazla bilgi için bkz. GitHub.
Sürüm numaraları nasıl çalışır?
Aşağıdaki oturum, tipik bir yaşam döngüsü boyunca sürüm numarasının nasıl değiştiğini gösterir: oluşturma, sürüm eşleşen başarılı güncelleme, eski sürümlü reddedilen yazma, EXCAS ile karşılaştır-ve-ayarla ve EXCAD ile sürüm eşleşmeli silme.
127.0.0.1:6379> EXSET foo 100
OK
127.0.0.1:6379> EXGET foo
1) "100"
2) (integer) 1
127.0.0.1:6379> EXSET foo 200 VER 1
OK
127.0.0.1:6379> EXGET foo
1) "200"
2) (integer) 2
127.0.0.1:6379> EXSET foo 300 VER 1
(error) ERR update version is stale
127.0.0.1:6379> EXCAS foo 400 2
1) OK
2)
3) (integer) 3
127.0.0.1:6379> EXCAD foo 3
(integer) 1
Önkoşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Küçük sürümü 1.2.3 veya üzeri olan bir Tair DRAM tabanlı veya kalıcı bellek optimizasyonlu örnek
En son küçük sürüm daha fazla özellik ve daha yüksek kararlılık sağlar. Örneği en son küçük sürüme güncelleyin. Daha fazla bilgi için bkz. Bir örneğin küçük sürümünü güncelleme . Küme veya okuma/yazma ayrıştırma örnekleri için, tüm komutların beklendiği gibi çalışmasını sağlamak üzere proxy düğümlerini de en son küçük sürüme güncelleyin.
Kullanım notları
TairString verileri bir Tair örneğinde depolanır. Yerel Redis dizeleri ve TairString'ler aynı Tair örneğinde birlikte bulunabilir; ancak yerel Redis dizeleri bu konuda açıklanan komutları desteklemez.
Komut özeti
| Komut | Sözdizimi | Açıklama |
|---|---|---|
| EXSET | EXSET key value [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version] [KEEPTTL] |
Anahtar yoksa bir TairString anahtarı oluşturur ve değer yazar; anahtar varsa değerin üzerine yazar. |
| EXGET | EXGET key |
Bir TairString anahtarının değerini ve sürüm numarasını döndürür. |
| EXSETVER | EXSETVER key version |
Bir TairString anahtarının sürüm numarasını ayarlar. |
| EXINCRBY | EXINCRBY key num [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version] [MIN minval] [MAX maxval] [KEEPTTL] |
Değeri bir tamsayı kadar artırır veya azaltır. |
| EXINCRBYFLOAT | EXINCRBYFLOAT key num [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version] [MIN minval] [MAX maxval] [KEEPTTL] |
Değeri bir kayan noktalı sayı kadar artırır veya azaltır. |
| EXCAS | EXCAS key newvalue version |
Sürüm eşleşiyorsa değeri günceller; eşleşmiyorsa geçerli değeri ve sürümü döndürür. |
| EXCAD | EXCAD key version |
Sürüm eşleşiyorsa anahtarı siler. |
| DEL | DEL key [key ...] |
Bir veya daha fazla TairString anahtarını siler. |
Sözdizimi kuralları
BÜYÜK_HARF: komut anahtar sözcüğü.eğik: değişken.[seçenekler]: isteğe bağlı parametre. Köşeli parantez içermeyen parametreler zorunludur.A|B: karşılıklı olarak özel seçenekler; yalnızca birini belirtin....: önceki parametre tekrarlanabilir.
EXSET
Time complexity| Öğe | Açıklama |
|---|---|
| Sözdizimi | EXSET key value [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version] [KEEPTTL] |
| O(1) | |
| Açıklama | Anahtar yoksa bir TairString anahtarı oluşturur ve değer yazar. Anahtar zaten varsa değerin üzerine yazar. |
Parametreler
key: yazılacak anahtar.value: yazılacak değer.EX time: saniye cinsinden göreli son kullanma süresi.0anahtarın hemen sona ereceği anlamına gelir. Atlanırsa anahtar sona ermez.EXAT time: saniye cinsinden mutlak son kullanma zamanı (Unix zaman damgası).0anahtarın hemen sona ereceği anlamına gelir. Atlanırsa anahtar sona ermez.PX time: milisaniye cinsinden göreli son kullanma süresi.0anahtarın hemen sona ereceği anlamına gelir. Atlanırsa anahtar sona ermez.PXAT time: milisaniye cinsinden mutlak son kullanma zamanı (Unix zaman damgası).0anahtarın hemen sona ereceği anlamına gelir. Atlanırsa anahtar sona ermez.NX: yalnızca anahtar yoksa yaz.XX: yalnızca anahtar zaten varsa yaz.-
VER version: sürüm numarasına göre karşılaştır-ve-ayarla.Anahtar varsa: belirtilen sürüm geçerli sürümle eşleştiğinde yazma başarılı olur; ardından sürüm 1 artırılır. Sürümler eşleşmezse hata döndürülür.
Anahtar yoksa veya geçerli sürümü 0 ise: VER değeri yoksayılır, yazma başarılı olur ve sürüm 1 olarak ayarlanır.
ABS version: sürümü koşulsuz olarak üzerine yazar. Yazmadan sonra sürüm, belirtilen ABS değerine eşit olur.KEEPTTL: anahtarın kalan TTL (time-to-live) değerini devralır.EX,PX,EXATveyaPXATile birlikte kullanılamaz.
Son kullanma parametresi ayarlanmamışsa (EX,PX,EXAT,PXATveyaKEEPTTL), anahtar sona ermez.
Dönüş değerleri
OK: yazma başarılı oldu.nil:XXbelirtildi ancak anahtar yok veyaNXbelirtildi ancak anahtar zaten var.Hata: diğer tüm başarısızlıklar.
Örnek
EXSET foo bar EX 10 NX ABS 100
OK
EXGET
| Öğe | Açıklama |
|---|---|
| Sözdizimi | EXGET key |
| Zaman karmaşıklığı | O(1) |
| Açıklama | Bir TairString anahtarının değerini ve sürüm numarasını döndürür. |
Parametreler
key: okunacak anahtar.
Dönüş değerleri
Değeri (bulk string) ve sürüm numarasını (integer) içeren bir dizi.
Hata: anahtar yok veya başka bir başarısızlık oluştu.
Örnek
EXGET foo
1) "bar"
2) (integer) 1
EXSETVER
| Öğe | Açıklama |
|---|---|
| Sözdizimi | EXSETVER key version |
| Zaman karmaşıklığı | O(1) |
| Açıklama | Bir TairString anahtarının sürüm numarasını ayarlar. |
Parametreler
key: güncellenecek anahtar.version: atanacak sürüm numarası.
Dönüş değerleri
1: sürüm başarıyla ayarlandı.0: anahtar yok.Hata: başka bir başarısızlık oluştu.
Örnek
EXSETVER foo 2
(integer) 1
EXINCRBY
| Öğe | Açıklama |
|---|---|
| Sözdizimi | EXINCRBY key num [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version] [MIN minval] [MAX maxval] [KEEPTTL] |
| Zaman karmaşıklığı | O(1) |
| Açıklama | Bir TairString anahtarının değerini bir tamsayı (LONG türü) kadar artırır veya azaltır. |
Parametreler
key: güncellenecek anahtar.num: eklenecek tamsayı miktarı (azaltmak için negatif değer kullanın).EX,EXAT,PX,PXAT,NX,XX,VER,ABS,KEEPTTL: EXSET ile aynı.MIN minval: izin verilen minimum değer. Sonuçminvaldeğerinden düşük olursa komut hata döndürür ve yazma yapmaz.MAX maxval: izin verilen maksimum değer. Sonuçmaxvaldeğerini aşarsa komut hata döndürür ve yazma yapmaz.
Son kullanma parametresi ayarlanmamışsa (EX,PX,EXAT,PXATveyaKEEPTTL), anahtar sona ermez.
Dönüş değerleri
Güncellenen değer (integer): artırma başarılı oldu.
(error) ERR increment or decrement would overflow: sonuçMIN/MAXaralığının dışına çıkacak.Hata: başka bir başarısızlık oluştu.
Örnek
Aşağıdaki örnek, önceden EXSET foo 1 çalıştırıldığını varsayar. Komut, foo değerini 100 artırır ve değeri maksimum 300 ile sınırlar.
EXINCRBY foo 100 MAX 300
(integer) 101
Desen: sınırlı sayaç
Sınırlarını asla aşmayan bir hız sınırlayıcı veya kota sayacı uygulamak için MIN ve MAX kullanın:
# Initialize the counter
EXSET requests 0
# Increment on each request; reject when the limit is hit
EXINCRBY requests 1 MAX 100
# Returns (error) ERR increment or decrement would overflow when the limit is reached
EXINCRBYFLOAT
| Öğe | Açıklama |
|---|---|
| Sözdizimi | EXINCRBYFLOAT key num [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version] [MIN minval] [MAX maxval] [KEEPTTL] |
| Zaman karmaşıklığı | O(1) |
| Açıklama | Bir TairString anahtarının değerini bir kayan noktalı sayı (DOUBLE türü) kadar artırır veya azaltır. |
Parametreler
key: güncellenecek anahtar.num: eklenecek kayan noktalı miktar (azaltmak için negatif değer kullanın).Diğer tüm seçenekler (
EX,EXAT,PX,PXAT,NX,XX,VER,ABS,KEEPTTL,MIN,MAX): EXINCRBY ile aynı.
Son kullanma parametresi ayarlanmamışsa (EX,PX,EXAT,PXATveyaKEEPTTL), anahtar sona ermez.
Dönüş değerleri
Güncellenen değer: artırma başarılı oldu.
(error) ERR increment or decrement would overflow: sonuçMIN/MAXaralığının dışına çıkacak.Hata: başka bir başarısızlık oluştu.
Örnek
Aşağıdaki örnek, önceden EXSET foo 1 çalıştırıldığını varsayar.
EXINCRBYFLOAT foo 10.123
(integer) 11.123
EXCAS
| Öğe | Açıklama |
|---|---|
| Sözdizimi | EXCAS key newvalue version |
| Zaman karmaşıklığı | O(1) |
| Açıklama | Geçerli sürüm belirtilen sürümle eşleşiyorsa bir TairString anahtarının değerini günceller. Eşleşmiyorsa anahtarı değiştirmeden geçerli değeri ve sürüm numarasını döndürür. |
Parametreler
key: güncellenecek anahtar.newvalue: sürüm eşleşirse yazılacak değer.version: geçerli sürümle karşılaştırılacak sürüm numarası.
Dönüş değerleri
["OK", "", latest_version]: güncelleme başarılı oldu. Ortadaki boş dizenin bir anlamı yoktur.["ERR update version is stale", current_value, current_version]: sürüm eşleşmedi. Anahtar değiştirilmedi.-1: anahtar yok.Hata: başka bir başarısızlık oluştu.
Örnek
Aşağıdaki örnek, önceden EXSET foo bar çalıştırıldığını varsayar (sürüm = 1).
EXCAS foo bzz 1
1) OK
2)
3) (integer) 2
Desen: iyimser kilitleme
Kilit olmadan oku-değiştir-yaz döngüsü uygulamak için EXCAS kullanın:
# 1. Read the current value and version
EXGET mykey
# Returns: value="old", version=5
# 2. Modify locally
# 3. Write back only if the version hasn't changed
EXCAS mykey "new" 5
# If another writer changed the key, EXCAS returns the stale-version error.
# Retry from step 1.
EXCAD
| Öğe | Açıklama |
|---|---|
| Sözdizimi | EXCAD key version |
| Zaman karmaşıklığı | O(1) |
| Açıklama | Geçerli sürüm belirtilen sürümle eşleşiyorsa bir TairString anahtarını siler. |
Parametreler
key: silinecek anahtar.version: geçerli sürümle karşılaştırılacak sürüm numarası.
Dönüş değerleri
1: anahtar silindi.0: sürüm eşleşmedi; anahtar silinmedi.-1: anahtar yok.Hata: başka bir başarısızlık oluştu.
Örnek
Aşağıdaki örnek, önceden EXSET foo bar çalıştırıldığını varsayar (sürüm = 1).
EXCAD foo 1
(integer) 1