Günlük Bo Bo Redis Hash yapı bellek modeli analizinin analizi

Açık Kaynak Çin OSC başlığında dikkat edin, en son teknik bilgileri alın

Genel bakış

Önceki "Redis String Type Dahili Kodlama Analizi" makalesinde, Redis analiz edildi En temel Dize türünün içi nasıl kodlanır ve depolanır? Bu makale Redis'teki kullanımı açıklayacak En sık Veri Türü: Karma (veya uzatma), Redis'in içinde nasıl.

  • Deneysel Kaynak Kodu Ortamı: Redis 4.0.10

Not: Bu makale ilk olarak yayınlandı Kişisel blogum ,Hoşgeldiniz Küçük istasyon

Bu makalenin içeriğinin içeriği aşağıdaki gibidir:

Karma tip dahili kodlama detayları

Redis için yaygın olarak kullanılır 5 Hız Veri Türü (String, Hash, Liste, Set, Sıralı Set), her veri türü sağlar. En az iki tür Dahili kodlama biçimi ve her veri türünün dahili kodlama yönteminin seçimi Kullanıcılar için tamamen şeffaftır , Redis veri hacmine göre daha optimize edilmiş dahili kodlama formatına uyum sağlayacaktır.

Bir anahtarın dahili kodlama biçimini görüntülemek istiyorsanız, gerçekleştirilecek Nesne Kodlama Koruma Adı Talimatlarını kullanabilirsiniz, örneğin:

127.0.0.1:6379 >

127.0.0.1:6379 > Foo Bar'ı ayarlayın

TAMAM

127.0.0.1:6379 >

127.0.0.1:6379 > Nesne Kodlama Foo // Redis anahtar değerinin kodlanmasını görüntüleyin

"EMBSTR"

127.0.0.1:6379 >

127.0.0.1:6379 >

En sık görülen karma türü için iki dahili kodlama yöntemi olabilir:

  • Obj_encoding_ziplist (Sıkıştırma Listesi)
  • Obj_encoding_ht (Karma tablo)

Redis temel alacak Veri miktarı Duruma Gel Uyarlanabilir Bu iki kodlama yöntemini seçin Daha iyi Bunlardan biri ve kullanıcılar için tamamen şeffaftır.

mevcut Daha az veri girişi var ,, Veri değeri küçük Redis ne zaman kullanacak Sıkıştırma listesi (OBJ_ENCODING_ZIPLES) Kodlama yöntemi saklanır. Burada "daha az" ve "küçük üyeler değeri" üyeleri aşağıdaki yapılandırma öğeleri tarafından yapılandırılabilir:

Hash-Max-Ziplist-Giriş 512

Hash-Max-Ziplist-Value 64

Redis varsayılan değeri varsayılan olarak verir. Elbette, kullanıcılar kendilerini gerçek duruma göre yapılandırabilirler.

Karma tip anahtarının alan sayısı < Hash-Max-Ziplist-Girişler ve her alan adı ve alan değerinin uzunluğu < Hash-max-ziplist-değeri olduğunda, Redis anahtarı depolamak için obj_encoding_ziplist kullanır, aksi takdirde obj_encoding_ht kodlamaya dönüştürülür.

Konuşma, önce bir deney yapabilir ve hissedebiliriz:

Açıkçası bu deney doğrulandı Alan değeri 64'ten büyük Aynı zamanda, kodlama biçimi Ziplist tarafından HashTable yöntemine geçirilir.

Kaynak koddan önce bir sır yoktu. Redis'in anahtarlamanın bu bölümünün kaynak kodu uygulamasına bir göz atalım ve sonra daha net anlayalım:

İki kodlama formatının dahili depolama modellerinin, ilgili niyetlerini bilen iki kodlama formatında aşağıdaki yorumlanması, niyetlerini doğal olarak anlar.

Obj_encoding_ziplist kodlama

Ziplist sıkıştırma listesi kompakt bir kodlama formatıdır. Genel fikir Zaman Değişikliği Alanı , Yani okuma ve yazma performansının bir kısmı pahasına, yüksek bellek uzay kullanımı karşılığında, bu nedenle sadece bunun için kullanılacaktır. Çok sayıda alan ,ve Alan değeri de küçük Faliyet alani, sahne.

Sıkıştırma listesinin son derece yüksek bellek kullanımının nedenleri, sürekli belleğinin özelliklerinden ayrılamaz. Tipik bellek yapısı aşağıdaki şekilde görüntülenebilir:

Dolayısıyla, Redis'in uzantısını depolamak için Ziplist kullanıyorsanız, öğenin düzenlemesi aşağıdaki şekilde gösterildiği gibi şematik bir diyagram haline gelecektir: yani anahtar ve değer mantıksal sürekli bellektir:

Obj_encoding_ht kodlama

OBJ_ENCODING_HT Bu kodlama yöntemi gerçek karma tablo yapısıdır veya O (1) karmaşıklığının okuma ve yazma işlemlerini elde edebilen bir sözlük yapısı olarak adlandırılır, bu nedenle verimlilik çok yüksektir.

REDIS'in içinde, OBJ_ENCODING_HT türünden gerçek dağılım listesinin gerçek dağılım listesinin veri yapısı katmanla iç içe katmandır. İlişki aşağıdaki gibidir:

Redis Hash tablosu tarafından tanımlanan kaynak kodundan görebiliriz:

Her bölüme daha yakından bakalım:

  • Hasar düğümleri hakkında (dikenlik)

  • Karma Tablolar ve Sözlükler Hakkında (DICT)

  • Dikttype hakkında

  • Redis'in karma değeri nasıl hesaplanır

Redis, karma kaynak kodunu aşağıdaki gibi hesaplar:

Bu bir C -dalı makro tanımıdır. Aslında, sahne arkasında, yukarıda belirtilen diktType yapısındaki işlev işaretçisi hashfonksiyonu, yukarıda tanıtılan diktType yapısıdır.

Ve hashfunction işlev işaretçisi, tıpkı aşağıdakiler gibi başlatma sırasında karma değerinin karma değerinin gerçek işlevine karşılık gelecektir:

  • Erişim Dizin Dizin Değeri Nasıl Hesaplanır

Dizin değerinin hesaplanması, yukarıda hesaplanan karma değerine bağlıdır. Kod aşağıdaki gibidir:

Bu noktada başka bir tane daha var Her zaman dikkate değer olan detaylar : Yani, dikt içinde her zaman iki karma masa yapısı vardır HT Ve onunla çok ilişkili Rehash Operasyonu Bu bir sonraki makalede detaylandırılmıştır.

Arka

Sınırlı yetenek nedeniyle, hatalar veya uygunsuz yerler varsa, lütfen eleştirin ve düzeltin!

Blog yazarı: Codesheep

Günlük blog sütunu, günde seçkin blogcuların yüksek kaliteli teknik makalelerini önerir. Aynı zamanda, kullanıcılar katkıda bulunabilir. Makale resmi hesaba dahil edildikten sonra, web sitesinin ana sayfasında tavsiye edeceğiz. odaklan Açık Kaynak Çin OSC Yüksek kaliteli push al, tıklayın " Daha fazlasını anlayın "Orijinal makaleyi okuyun.

Güzel ya da değil! Meizu 15 resmen Sanayi ve Bilgi Teknolojileri Bakanlığı'na girdi: tam ekran olmayan + ön parmak izi + metal çekme işlemi
önceki
Yatırım istatistikleri: NEEQ finansmanı ilk çeyrekte yükseldi ve ani artışlar
Sonraki
Sebze yetiştirmeyi, pişirmeyi, kaligrafi yapmayı öğrenin ... bu toplum eğitim koleji sakinlere ücretsiz ders veriyor
Stephen Chow, Shen Teng ve Huang Bo, komedinin yeni kralı olan Bahar Şenliği için savaşıyorlar? Yeni yılda gerçek bölümü görün
Günlük blogk8s Kubernetes v1.10.0 küme kurulum belgeleri
Python2 ve Python3 arasındaki temel farkları yorumlama örnekleri
Mi MIX 2S'nin maliyeti ortaya çıktı, fiyatı 3K +! Lei Jun açıkçası: Xiaolong 845 gerçekten pahalı
Sen benim gözlerimsin: Harbin'den Xiangyang'a giden trende, kondüktör kör yolcularla ilgileniyor
Makinenin N lüks reklamları öğrenmesine izin verdikten sonra, Lexus ilk reklamı çekmek için AI kullandı used Teknoloji
Haftalık elektrikli seyahat bilgileri envanteri: Pekin, otonom sürüş testi yollarını tanımlıyor
Che Yun Morning News | Lyft halka arzla ilgili taslakları gizlice sundu, Tesla sahipleri büyük bir şaka yaptı
Yılbaşı gecesi konser reytingleri açıklandı! Hunan Uydu TV 5 yıl üst üste birinci oldu
Dünyanın ilk AI parkını deneyimleyin: Haidian Park, Baidu insansız araçlarından daha fazlasıdır
Kullanıcı deneyiminde yenilik yapın ve sektördeki sorunlu noktaları çözün! Grandland Smart P-serisi Akıllı Merkezi Kontrol Deneyimi Değerlendirmesi
To Top