Redis EXPIRE Hash Anahtarı

Redis Expire Hash Anahtari



Redis karmaları, JSON nesnesine, Java HashMap'e veya Python sözlüğüne çok daha benzer olan özel bir veri türüdür. Ayrıca, etki alanı nesnelerini modellemek için kullanılabilen bir alan-değer çiftleri topluluğudur. Redis karma veri yapısı, her bir karma anahtarın dört milyara kadar alan değeri çiftini depolayabildiği, bellek açısından son derece verimlidir. En önemlisi, HSET, HGET, HMGET, vb. gibi temel karma işlemler sabit zaman karmaşıklığı üzerinde çalışır.


Redis karma anahtarlarının sonsuz yaşam süresi (TTL) vardır, bu da kalıcı oldukları anlamına gelir, bunlar DEL gibi komutlar kullanılarak açıkça silinir. Bu makalede, EXPIRE komutunu kullanarak Redis karmaları için TTL'yi ayarlamaya odaklanacağız.







Redis EXPIRE Komutu

EXPIRE komutu, bir Redis karma, küme, liste vb. belirli bir anahtarında bir zaman aşımı ayarlamak için kullanılır. Zaman aşımı süresi dolarsa Redis anahtarı veritabanından silinir. En önemlisi, anahtarın içeriği silinene veya üzerine yazılana kadar zaman aşımı süresi belirsizdir. Bir anahtarla ilişkili değerlerin değiştirilmesi, sona erme süresini etkilemez.



EXPIRE komutunun sözdizimi aşağıdaki gibidir:



EXPIRE anahtarı expiry_time_seconds [ NX | GX | GT | LT ]


anahtar: Bir zaman aşımı ayarlamanız gereken Hash, List veya Set anahtarı.





expirty_time_saniye: Saniye cinsinden zaman aşımı değeri.

EXPIRE komutu tarafından birkaç isteğe bağlı bağımsız değişken kabul edilir.



NX: Zaman aşımı değeri, yalnızca belirtilen anahtarın zaten bir son kullanma tarihi yoksa ayarlanır.

XX: Belirtilen anahtarın mevcut bir zaman aşımı değeri olduğunda, yeni süre sonu ayarlanır.

GT: Yeni zaman aşımı değeri mevcut olandan büyükse, yeni zaman aşımı ayarlanır.

LT: Yeni zaman aşımı değeri, mevcut olan yenisinden daha büyükse ayarlanır.

En önemlisi, EXPIRE komutu sabit zaman karmaşıklığı üzerinde çalışır. Komut yürütme başarılı olursa tamsayı 1 döndürülür. Yanlış argümanlar veya mevcut olmayan anahtarlar nedeniyle işlem başarısız olursa, 0 döndürülür.

Aşağıdaki bölümde gösterildiği gibi bir sona erme süresi ayarlamak için karmalarda EXPIRE komutunu kullanacağız:

EXPIRE Komutunu Kullanarak Redis Hash'in Süresini Doldurun

Kullanıcı başına bir oturum bilgisinin bir Redis karmasında depolandığını varsayalım. oturum:id:1000:kullanıcı:10. Birden çok alan-değer çifti ile bir Redis karması oluşturmak için HMSET komutunu aşağıdaki gibi kullanabiliriz:

hmset oturumu:id: 1000 :kullanıcı: 10 Kullanıcı adı 'jae' kurabiye 'evet' şifre '389Ysu2'


Oluşturulan hash’i HGETALL komutu ile inceleyelim.

hgetall oturumu:id: 1000 :kullanıcı: 10



Ayrıca, kullanıcı 60 saniyeden fazla boşta kalırsa oturum 10 saniye sonra sona erer. Oturum sona erme, oturum bilgilerini depolayan karma için sona erme süresi ayarlanarak elde edilir.

EXPIRE komutunu aşağıdaki gibi kullanabiliriz:

oturumu sonlandır: id: 1000 :kullanıcı: 10 10


Belirtildiği gibi, zaman aşımı değeri 10 saniye olarak ayarlanmıştır.


Beklendiği gibi, dönüş değeri 1'dir; bu, TTL'nin karma için başarıyla ayarlandığı anlamına gelir. Karma anahtarın Redis mağazasından kaldırılmasına kalan süreyi kontrol edelim. TTL komutu aşağıdaki gibi kullanılabilir:

ttl oturumu:id: 1000 :kullanıcı: 10



Çıktıda gösterildiği gibi, hash'i otomatik olarak kaldırmadan önce üç saniye kaldı. 10 saniye sonra TTL komut çıktısı aşağıdaki gibidir:


-2 tamsayı yanıtı belirtildiği gibi, karma mevcut değildir.

Bir Sona Erme Süresinin Varlığına Dayalı Zaman Aşımı Ayarlayın

EXPIRE komutu, belirtilen bir karma için geçerlilik süresinin sona ermesine bağlı olarak yeni bir zaman aşımı ayarlamak üzere NX ve XX bağımsız değişkenlerini kabul eder. ile yeni bir hash oluşturalım. noTimeOut anahtar .

hmset noTimeOut adı 'Ölçek'


Bir önceki hash için yeni bir süre sonu ayarlamaya çalışalım. Ek olarak, XX argümanını EXPIRE komutuna da iletiyoruz.

sona erme noTimeOut on beş XX


belirttiğimiz için XX komuttaki seçenek, sona erme süresi ayarlanmaz. XX seçeneği, belirtilen karma anahtarla ilişkilendirilmiş mevcut bir zaman aşımı yoksa yeni bir sona erme süresi ayarlamanıza izin vermez.


eğer kullanırsak NX seçeneği, zaman aşımı değeri 15 olarak ayarlanır.

sona erme noTimeOut on beş NX



EXPIRE komutu, zaman aşımının doğru şekilde ayarlandığı anlamına gelen 1 tamsayı yanıtını döndürür.

Mevcut Zaman Aşımı Değerine Göre Zaman Aşımı Ayarla

GT ve LT seçenekleri, mevcut zaman aşımı uzunluğuna dayalı olarak karma sona erme süresini ayarlamak için kullanılabilir.

Adlı yeni bir karma oluşturalım hashWithTimeout.

hmset hashWithTimeout alan1 değer1


Ardından, karma için 200 saniyelik bir sona erme süresi belirledik.

sona erme hashWithTimeout 200


Aşağıdaki gibi GT seçeneği ile birlikte karma için 100 saniyelik yeni bir zaman aşımı belirlemeye çalışalım:

sona erme hashWithTimeout 100 GT


GT seçeneği belirtildiğinden, EXPIRE komutu yeni zaman aşımı değerinin mevcut olandan büyük olup olmadığını kontrol edecek ve yeni zaman aşımı süresini ayarlayacaktır. Bu örnekte, yeni zaman aşımı, mevcut zaman aşımından büyük değil. Bu nedenle, komut yeni sona erme süresini ayarlamaz ve 0 döndürülür.


GT yerine LT seçeneğini kullanalım. Yeni sona erme süresi mevcut olandan daha düşük olduğundan, aşağıdaki komut yeni zaman aşımını başarıyla ayarlamalıdır.

sona erme hashWithTimeout 100 LT


Çözüm

Kısacası, Redis EXPIRE komutu, belirli bir anahtar için bir TTL değeri ayarlamak için kullanılır. Varsayılan olarak, Redis karma anahtarları, kalıcı olarak adlandırılan herhangi bir zaman aşımı ile ilişkilendirilmez. Tartışıldığı gibi, EXPIRE komutu Redis karmasında bir zaman aşımı değeri ayarlamak için kullanılır. Genellikle, karma, zaman aşımı değeri olarak belirtilen süreden sonra Redis veri deposundan silinir. Örneklerde gösterildiği gibi, EXPIRE komutu, bir koşula dayalı olarak karma süresinin dolmasını ayarlamak için XX, NX, GT ve LT gibi bazı isteğe bağlı bağımsız değişkenleri kabul eder.