Çekirdek veriEşgüdüm

Dağıtık Kilitler

Aynı anda bir işi yalnızca bir çalışanın çalıştırdığından emin olun; kendiliğinden sona eren ve sahibi tarafından güvenle serbest bırakılan kilitlerle.

edinmek için komut
1
güvenle serbest bırakmak için komut
1
Lua betiği
0
Adım 1 / 5
Çalışan A kilidi alır

NX onu yalnızca kimse tutmuyorsa alır. PX 30000, A ölürse 30 saniyede sona ermesini sağlar.

Örnek oturumplaying
# Çalışan A kilidi alır
hotkv> SET lock:billing-run tok-a81f NX PX 30000
OK

Gerçek HotKV komutları ve örnek yanıtlarla animasyonlu bir anlatım. Herhangi bir adıma atlamak için üzerine tıklayın. Komutlar ve yanıtlar, HotKV'de yazdığınız ve gördüğünüz haliyle İngilizce kalır.

Sorun

Birkaç makinedeki cron işleri, ödeme tahsilatları ve önbellek yeniden oluşturmaları aynı anda iki kez çalışmamalıdır. Sona ermesi olmayan bir kilit, sahibi çöktüğünde sonsuza dek tutulur; düz bir DEL ile bir kilidi serbest bırakmak ise sizinki sona erdikten sonra başkasının kilidini silebilir.

HotKV bunu nasıl ele alır

NX ve PX ile SET, bir kilidi yalnızca kimse tutmuyorsa edinir ve çöken bir sahibin onu sonsuza dek tutamaması için ona bir sona erme süresi verir. Her sahip değer olarak rastgele bir belirteç saklar. IFEQ ile DELEX, kilidi yalnızca hâlâ sizin belirtecinizi tutuyorsa siler; bu, eskiden bir Lua betiği gerektiren güvenli serbest bırakmadır.

Adım adım

Ne olur, komut komut

  1. 01

    Çalışan A kilidi alır

    NX onu yalnızca kimse tutmuyorsa alır. PX 30000, A ölürse 30 saniyede sona ermesini sağlar.

    SET lock:billing-run tok-a81f NX PX 30000
  2. 02

    Çalışan B geri çevrilir

    Kilit tutuluyor, bu yüzden B nil alır ve bu çalıştırmayı atlar.

    SET lock:billing-run tok-b22c NX PX 30000
  3. 03

    A işi yapar

    Faturalandırma işini yalnızca bir çalışan çalıştırır.

    PTTL lock:billing-run
  4. 04

    Yalnızca kendi kilidinizi serbest bırakın

    DELEX anahtarı yalnızca değer hâlâ A'nın belirteciyse siler.

    DELEX lock:billing-run IFEQ tok-a81f
  5. 05

    Yanlış belirteç hiçbir şey yapmaz

    A çok yavaş kalmış ve kilidi artık B tutuyor olsaydı, A'nın serbest bırakması B'nin kilidine dokunmazdı.

    DELEX lock:billing-run IFEQ tok-stale
Nereye uyar

Gerçek dünya senaryoları

Zamanlanmış işler

Aynı cron her örnekte çalışır ve kilit, işi tam olarak birinin yapmasını sağlar.

Ödemeler

Bir siparişteki tahsilat ve iade işlemleri seri hale getirilir; böylece asla çakışmaz.

Önbellek izdihamı koruması

Pahalı bir önbellek girdisini yalnızca bir istek yeniden oluşturur; diğerleri bekler veya bayat değeri sunar.

Yerleşik

Neler elde edersiniz

Sona ermeyle edinme

SET NX PX kilidi yalnızca boşsa, bir zaman aşımıyla alır.

SETNXPX

Güvenli serbest bırakma

DELEX IFEQ yalnızca değer belirtecinizle eşleşirse siler.

DELEX

Çalışırken uzatma

Kalan süreyi denetleyin ve uzun işler için uzatın.

PTTLPEXPIRE

Özetle karşılaştırma

Büyük değerler için DELEX IFDEQ, değerin tamamı yerine bir özeti karşılaştırır.

DIGESTIFDEQ

Sık sorulan sorular

Neden kilidi DEL ile silmeyelim?

Kilidinizin süresi dolduysa ve başka bir çalışan onu aldıysa, düz bir DEL onların kilidini silerdi. DELEX IFEQ onu yalnızca hâlâ sizin belirtecinizi tutarken siler.

Sona erme süresi ne kadar olmalı?

İşin normalde sürdüğünden uzun. Uzun işler için, kilidi hâlâ tutarken sona erme süresini düzenli olarak uzatın.

Güvenli serbest bırakma için Lua gerekir mi?

Hayır. DELEX karşılaştırma ve silmeyi tek komutta yapar.

İlgili kullanım senaryoları

Kendi iş yükünüzde deneyin

HotKV, Redis protokolünü konuşur; bu yüzden mevcut bir istemciyi ona yönlendirip aynı komutları çalıştırabilirsiniz.