Redis XTRIM

Redis Xtrim



Redis Akışlarının Düşük Seviyeli Ayrıntıları

Redis akışları, bellek açısından verimli bir depolama mekanizmasıyla bir dizi yüksek verimli okuma ve ekleme işlemi sağlayan salt eklemeli bir veri yapısıdır. Dahili olarak, Redis akışları, yüksek bellek verimliliğine sahip, alanı optimize edilmiş bir ağaç olan bir Radix ağacı veri yapısı kullanır.

Redis akışları, verileri her girişin anahtar/değer çiftlerinden oluştuğu bir giriş listesi olarak depolar. Düşük düzeyde, bu girişler, aşağıda gösterildiği gibi makro düğümler halinde paketlenir.









Bu yazıda, XTRIM komutu kullanılarak akım girdilerinin kaldırılmasına odaklanıyoruz ve yukarıda bahsedilen konsept, kaldırma işleminin verimliliğini yakından etkiliyor. Genellikle, Redis akış girişi kaldırma işlemi makro düğüm düzeyinde yapılırsa ancak giriş düzeyinde yapılmadıysa çok verimlidir. Bu mekanizma, bir sonraki bölümde tartışacağımız XTRIM komutu ile uygulanmaktadır.



XTRIM Komutu

XTRIM komutu, belirli bir eşik değerine dayalı olarak bir akışın girişlerini kesmek için kullanılır. Eşik, akış başına maksimum giriş sayısı veya daha eski bir giriş kimliği olabilir. XTRIM komutu, eşik türünü bir komut argümanı olarak kabul eder. XTRIM komutunun sözdizimi aşağıdaki gibidir.





XTRIM akış anahtarı MAXLEN | MINID [ = | ~ ] eşik değeri [ LIMIT sayısı ]

stream_key : Redis akışının anahtarı.

MAXLEN : Girişleri kırptıktan sonra akışın maksimum uzunluğu. Eşik değeriyle belirtilen akış uzunluğunu aşan tüm girişler kaldırılacaktır. Bu argüman pozitif bir tamsayıdır.

MINID : Girişleri kırptıktan sonra kalması gereken minimum akış kimliği. Kimlikleri belirtilen eşiğin altında olan tüm girişler kaldırılacaktır. Bu parametreyi her belirttiğinizde, eşik bir akış kimliği olur.

= operatör : Belirtildiğinde, eşik değerine göre kesin kırpma gerçekleştirilecektir.

~ operatör : Belirtildiğinde, eşik değerine ve makro düğüm boyutuna göre neredeyse kesin kırpma gerçekleştirilecektir.

eşik değeri : MAXLEN veya MINID bağımsız değişkenine dayalı eşik değeri.

LIMIT sayısı : Kaldırılacak maksimum giriş sayısı.

Kullanım Durumu 01 – Maksimum Uzunluğa Dayalı Akış Girişlerini Kaldırma

Bir turizm şirketinin turist bilgilerini takip etmek için bir Redis mağazası tuttuğunu varsayalım. Redis akış veri yapısı, her turistin bilgilerini anahtar/değer çiftleri olarak depolamak için kullanılmıştır. Zamanla, akış büyüdü ve yalnızca en son 1000 girişi tutmayı planlıyorlar. Bu nedenle, akışın maksimum uzunluğunun herhangi bir zamanda 1000 olması gerektiğini belirlediler. Bunu başarmak için XTRIM komutu kullanılmıştır.

Gösteri amaçlı olarak öncelikle aşağıdaki gibi 10 girişli bir stream oluşturacağız. Eklemeyi gerçekleştirmek için XADD komutu kullanılmıştır.

xadd turist bilgisi * isim jack ülke italya familymems 5
xadd turist bilgisi * adı harry country usa familymems iki
xadd turist bilgisi * isim nikomita ülke japonya familymems 3
xadd turist bilgisi * isim zakaria ülke hindistan familymems iki
xadd turist bilgisi * isim redmond ülke brezilya familymems 6
xadd turist bilgisi * isim bulundu ülke japonya familymems 3
xadd turist bilgisi * adı maryjohn ülke abd familymems iki
xadd turist bilgisi * isim liza ülke italya familymems 5
xadd turist bilgisi * isim nimshikaa ülke japonya familymems 3
xadd turist bilgisi * isim nisha ülke italya familymems 5

Turistinfo akışını aşağıdaki gibi incelemek için XRANGE komutunu kullanalım.

xrange turizm bilgisi - +

Çıktı:

Beklendiği gibi, bu komutla 10 akış girişi görüntülendi.

Gösteri amacıyla, akışı maksimum uzunluğunun 5 olacağı yerde keseceğiz.

xtrim turistik bilgi maxlen 5

XRANGE komutu ile stream girişlerini tekrar inceleyelim.

Beklendiği gibi, akıştan beş giriş çıkarıldı ve uzunluğu 5'tir.

Kullanım Durumu 02 – Akış Kimliklerine Dayalı Akış Girişlerini Kaldırma

Bir hava durumu şirketinin Redis akışlarını kullanarak belirli bir konumun hava durumu bilgilerini takip ettiği bir örneği ele alalım. Artık gerekmeyen eski girdileri silmek istiyorlar. Aşağıda gösterildiği gibi MINID stratejisini kullanarak XTRIM komutunu kullanabiliriz.

İlk olarak weatherinfo adında bir stream oluşturacağız ve buna aşağıdaki gibi 5 girdi ekleyeceğiz.

xadd hava durumu bilgisi * sıcaklık 10 nem elli
xadd hava durumu bilgisi * sıcaklık yirmi nem 70
xadd hava durumu bilgisi * sıcaklık 12 nem 65
xadd hava durumu bilgisi * sıcaklık on beş nem 88
xadd hava durumu bilgisi * sıcaklık 18 nem Dört beş

Çıktı:

Belirtilen eşik değerinden daha düşük ID'leri olan girişleri kaldırmak için XTRIM komutunu kullanalım.

xtrim hava durumu bilgisi MINID 1660485503248 - 0

Belirtilen minimum kimlik, üçüncü girişle ilişkilendirilir. Bu nedenle üçüncü girişten sonra daha düşük kimlikli girişler silinecektir.

Çıktı:

= veya ~ argümanlarını açıkça belirtmediğimiz için komut varsayılan olarak = operatörünü kullanır. Bu nedenle, her iki kullanım durumunda da kesin düzeltme yapılmıştır. ~ operatörünü açıkça belirttiyseniz, aşağıda gösterildiği gibi neredeyse kesin kırpma yapılacaktır.

Yukarıdaki şekilde gösterildiği gibi, XTRIM komutu ~ operatörü ile birlikte kullanılmıştır. Komuttan 100 uzunluğunu aşan tüm girdileri kaldırmasını istiyoruz. XTRIM komutunu kesin bir trimleme yapmaya zorlamadığımız için trimleme işleminin verimliliğine odaklanacaktır. Bu nedenle, aynı makro düğümüne ait olan anlık girdileri kaldırmaz. Aynı makro düğümde bulunan sonraki üç girişi tutacak ve bunlardan sonraki tüm makro düğümleri kaldıracaktır. Komutu fazladan çaba sarf etmeye zorlayan kesin düzeltme yaklaşımına göre önemli miktarda performans artışı sağlar. Aynı prosedür, eşik giriş kimliklerini temel aldığında gerçekleşir.

LIMIT argümanı, biraz daha fazla performans iyileştirmesi elde etmek için kullanılabilecek belirtilen akıştan çıkarılan girişlerin sayısını sınırlar.

Çözüm

Kısacası, XTRIM komutu, bir eşik değerine dayalı olarak akış girişlerini kaldırmak için kullanılır. Eşik değerinin türü, MAXLEN ve MINID komut argümanları kullanılarak belirtilen bağlamla değiştirilebilir. Tartışıldığı gibi, kırpma işlemi, eşiği tam veya yaklaşık bir sınır olarak dikkate alacağı kırpma işlemi iki şekilde yapılabilir. Varsayılan olarak komut, kesin kırpma için kullanılan = operatörünü kullanır. ~ operatörü ile yukarıdaki bölümde bahsedildiği gibi yaklaşık bir kırpma yapabilirsiniz. Genel olarak, yaklaşık kırpma yaklaşımı ve LIMIT argümanı, XTRIM komutuyla önemli bir performans kazancı elde etmenize yardımcı olur.