Redis'in beş veri türünü ve uygulama senaryo analizini kolayca anlayın (Redis gerçek savaş belgeleriyle)

1. Redis'in temel kavramlarına ve özelliklerine giriş

  • 1.1 Redis'in temel kavramlarına giriş

1. Redis uzak, bir istemci ve bir sunucu ile, genellikle sunucu diyoruz;

2. Redis ** belleğe dayalıdır **, bu nedenle sabit diske dayalı MySQL'den çok daha hızlıdır, ancak belleği çok tüketir

3. Redis, ilişkisel olmayan bir veritabanıdır. Esasen aynı zamanda bir veritabanıdır, ancak MySQL ilişkisel veritabanı depolandığında bir veri sözlüğü tanımlanmalıdır, ancak Redis'in buna ihtiyacı yoktur.

  • 1.2 Redis ve Memcached Karşılaştırması

Redis veri türlerinin tümü push / pop, ekle / kaldır, kesişim, birleştirme ve fark ve daha zengin işlemleri destekler ve bu işlemlerin tümü atomiktir.

Memcached gibi, verimliliği sağlamak için veriler bellekte önbelleğe alınır. Aradaki fark, Redis'in düzenli olarak güncellenmiş verileri diske yazması veya değişiklik işlemlerini ek kayıt dosyalarına yazması ve bu temelde ana-bağımlı (ana-bağımlı) senkronizasyonunu gerçekleştirmesidir.

  • 1.3 Redis, master-slave senkronizasyonunu destekler

Veriler ana sunucudan herhangi bir sayıda ikincil sunucuya senkronize edilebilir ve ikincil sunucu, diğer bağımlı sunucularla ilişkili ana sunucu olabilir. Bu, Redis'in tek seviyeli ağaç çoğaltması gerçekleştirmesine olanak tanır. Diske kaydet, kasıtlı veya kasıtsız olarak veri yazabilir. ** Yayınla / abone ol ** mekanizması tam olarak uygulandığından, ağacı veritabanından herhangi bir yerden senkronize ederken bir kanala abone olmak ve ana sunucunun tam mesaj yayın kaydını almak mümkündür. Senkronizasyon, okuma işlemlerinin ölçeklenebilirliği ve veri yedekliliği için çok yararlıdır.

İki, Redis uygulama senaryoları

  • 2.1 Önbellek

Redis genellikle şu şekilde kullanılır: Veri önbelleği .

Bazı sistem arayüzleri yavaş olduğunda, bazı verileri Redis'te önbelleğe alabiliriz. Bir dahaki sefere verileri getirdiğimizde, çok zaman alan SQL işlemleri gerçekleştirmeyeceğiz. Sistem performansını iyileştirmek için verileri doğrudan önbellekten alacağız. Yöntemlerden biri;

  • 2.2 Sıra

Push ve pop işlemleri atomikliğin gerçekleşmesini sağlar;

  • 2.3 Veri depolama

Tüm eklemeler, silmeler, değişiklikler ve kontroller Redis'te gerçekleştirilir.Redis, veri bütünlüğünü ve güvenliğini sağlamak için düzenli olarak depolanan bir sabit disk kalıcılık mekanizmasına sahiptir.

Redis istemcisini görüntüleyin: hangi redis-cli Oturum açma: redis-cli (varsayılan olarak bu makinenin 6379 numaralı bağlantı noktasına giriş yapın) redis bilgilerini görüntülemek için bilgi komutu

Üç, Redis veri türü

Redis'de, adın bileşen içeriği olarak \ n ve boşlukların yanı sıra diğer içerikler de anahtarın ad kısmı olarak kullanılabilir. Adın uzunluğu gerekli değildir.

* anahtar var # Belirtilen anahtarın var olup olmadığını test edin del key1 key2 key3 # Verilen anahtarı sil * anahtar yazın # Verilen değerin türünü geri döndürün anahtar deseni # Belirtilen desenle eşleşen tüm anahtarları geri döndür eski anahtarı yeniden adlandır yeni anahtar # Adı değiştir * dbsize # Mevcut veritabanındaki anahtar sayısını döndürür anahtar saniyeleri sona erdirme # Anahtarın sona erme süresini belirtin * ttl key # Anahtarın kalan sona erme saniyelerini döndürür * db-endeksini seçin # Veritabanını seçin, toplam 16 db-index anahtarını taşı # Anahtarı geçerli veritabanından belirtilen veritabanına taşı * flushdb # Mevcut veritabanındaki tüm anahtarları sil flushall # Tüm veritabanlarındaki tüm anahtarları sil

  • 3.1 String tipi operasyon

İşlev: Dize veya tamsayı işlemleri sağlayın.

anahtar değerini ayarla (dize / int / float) anahtarı al incr string // Artış decrby dizesi // azalma

Dize, en temel redis türüdür

Redis dizesi herhangi bir veri içerebilir. Jpg görüntüleri (ikili) veya serileştirilmiş nesneler dahil. Tek bir değerin maksimum üst sınırı 1G bayttır. Yalnızca dize türü kullanılırsa, redis kalıcılık özelliklerine sahip memcache olarak kabul edilebilir.

anahtar değerini ayarla # Anahtara karşılık gelen değeri dize türünün değerine ayarlayın * mset anahtar1 değer1 anahtar2 değer2 # Birden çok anahtarın değerini aynı anda ayarlayın * mget key1 key2 # Tek seferde birden fazla anahtarın değerini alın * incr anahtar # Anahtarın değerini ekle ve ekle ve yeni değeri döndür decr key # Anahtarın değerini azaltır ve yeni değeri döndürür incrby anahtar tamsayı # incr olarak aynı, belirtilen değeri ekleyin decrby anahtar tamsayı #Decr olarak aynı, eksi belirtilen değer * anahtar değeri ekleyin # değeri, belirtilen anahtarın dize değerine ekleyin * substr key start end # Yakalanan anahtarın dize değerini döndürür
  • 3.2 Bağlantılı liste türünü listeleyin

İşlev: mağaza sırası koleksiyonu, kuyruk, itme ve açma işlemleri için kullanılabilir

sola itin hemen çık llen anahtarı Listede kaç öğe olduğunu görün

Liste türü ilk giren ilk çıkar, kuyruklar için uygundur; Liste, içindeki öğelerin benzersiz olmasını gerektirmez

(1. Giriş

En son 10 kullanıcı bilgisini alın: kullanıcı sırasından * logintime desc limit 10'a göre seçin; Yukarıdaki sql ifadesi kullanıcı ihtiyaçlarını karşılayabilir, ancak çok fazla veri olduğunda tüm veriler etkilenecek ve veri tabanı üzerindeki yük görece yüksek olacaktır. Gerekirse, anahtar alan (id veya logintime) için bir dizin ayarlamanız gerekir ve dizin ayrıca sistem kaynaklarını tüketir.

Yukarıdaki işlevler bağlantılı liste aracılığıyla gerçekleştirilirse, yalnızca en son 10 veri bağlantılı liste listesinde tutulabilir ve her yeni veri her yeni veri geldiğinde silinir. Her seferinde gerekli verileri doğrudan bağlantılı listeden alabilirsiniz. Kaynak tüketiminin tüm yönlerini büyük ölçüde koruyun

(2) Uygulama

Liste türü aslında çift bağlantılı bir listedir. Push ve pop işlemleriyle bağlantılı listenin başından veya kuyruğundan öğeler ekleyin ve silin. Bu, listenin hem yığın hem de kuyruk olarak kullanılmasına izin verir.

Yukarıdan içeri ve dışarıya: Üst üste ve aşağıya Yığın: Sıra

lpush key string # İlgili anahtar listesinin başına dize öğeleri ekleyin rpop anahtarı # Listenin sonundaki öğeyi sil ve silinen öğeye geri dön llen anahtarı, listenin uzunluğuna karşılık gelen # anahtarını döndürür, anahtar yoktur, 0 döndürür, türe karşılık gelen anahtar liste değilse, bir hata döndürür lrange key start end # Belirtilen aralıktaki öğeleri döndürür ve alt simge 0'dan başlar rpush anahtar dizesi # Yukarıdaki ile aynı, sonuna ekleyin lpop key # Öğeyi listenin başından kaldır ve öğeyi silmek için geri dön ltrim key start end # Listeyi keser ve elemanları belirtilen aralıkta tutar

1.lrange tuşu 0 -1 Tüm öğeleri çıkarın. 2. lrem key n / -n X Belirtilen öğeyi n kez silin. 3. anahtarı key1'den önce / sonra yerleştirin. Key2'yi key1'den sonra / sonra ekleyin. 4. rpoplpush key1 key2, key1'in sağ anahtarını key2 bağlantılı listesine koyar, Atomiklik . Operasyonel kullanım

İşlev: sırasız koleksiyon, Her öğe farklıdır .

Öğe ekleyin: sadd anahtar değeri Kaç tane element olduğunu belirleyin: yara izi anahtarı Bir öğenin kümede olup olmadığını belirleyin: sismember anahtar değeri Bir öğeyi silme: srem anahtar değeri Tüm değerleri alın ve bir dizi olarak döndürün: $ redis- > sMembers ('dst')); int (2) dizi (2) { = > dize (1) "4" = > dize (1) "2" }
  • 3.3 Set tipi

Türü ayarlayın, birden fazla farklı öğeyi sırasız bir şekilde saklayın ve öğeleri hızla ekleyin, arayın ve silin; Aynı öğe yalnızca bir .

Redis kümesi, dizge türünün sırasız bir koleksiyonudur. Set elemanı en fazla (2'den 32'ye kadar güç-1) eleman içerebilir. Set toplama türü ile ilgili olarak, temel ekleme ve silme işlemlerine ek olarak, diğer yararlı işlemler de koleksiyonları içerir. Birlik (Birlik), Kavşak (kesişme), Çıkarma (fark). Bu işlemler sayesinde sns'deki ** arkadaş tavsiyesi işlevi ** kolayca gerçekleştirilebilir. Not: Her kümedeki her öğe tekrarlanamaz.

sadd anahtar üye # Anahtara karşılık gelen kümeye bir dize öğesi ekleyin ve başarılı olursa 1'i döndürün. Öğe zaten kümede ise, 0 döndür ve anahtara karşılık gelen küme yoksa bir hata döndür srem anahtar üye # Verilen elemanı anahtara karşılık gelen kümeden kaldır ve başarılı olursa 1 döndür smove p1 p2 üye # p1'e karşılık gelen kümeden üyeyi kaldır ve p2'ye karşılık gelen kümeye ekle korkutma anahtarı # Setteki öğelerin sayısını döndürür sismember anahtar üye # Üyenin kümede olup olmadığını değerlendirme sinter key1 key2 ... keyn # Verilen tüm anahtarların kesişimini geri döndürün sunion key1 key2 ... keyn # Verilen tüm anahtarların birleşimini geri döndür sdiff key1 key2 ... keyn # Verilen tüm anahtarların farkını döndürür anahtarı okur # Anahtara karşılık gelen kümenin tüm öğelerini döndürür ve sonuç sıralanmamış olur

Bu tür bir uygulama: Qq arkadaşları tarafından tavsiye edilir.

Tom Arkadaş Çevresi (XX ile Arkadaşlar): Mary Jack Xiaoming Wang5 Wang6 linken arkadaş çevresi (XX ile arkadaşlar): yuehan daxiong luce wang5 wang6

  • 3.4 karma türü

İşlev: Anahtar-değer yapısı saklanır, anahtar dizge olmalıdır

Genellikle daha karmaşık yapıları depolamak için kullanılan Hash, yalnızca ad, yaş vb. Gibi farklı anahtarlar gerektirir.

Ekle / değiştir: hset hash1 key112 Get: hget hash1 key1 Karma uzunluğunu görüntüleyin: hlen anahtarı Tek seferlik erişim: hmget hash1 key1 key2

  • 3.5 Sıralama Seti Sıralama Seti Tipi

İşlev: Depolama, sıralı bir puan koleksiyonudur, Genellikle skor tablolarında kullanılır .

sıralama kümesi genellikle sınıf performansı sıralaması gibi sıralama için kullanılır

Hash gibi depolama da bir eşlemedir. Depolanan, puanlar ve öğeler arasındaki eşlemedir. Liderlik tablosu olduğu görülebilir. Değer küresel olarak benzersiz olmalıdır. puan kayan nokta türüdür. Sıralama türü işlemi, iki öğenin puanları aynıysa, bayt sırasına göre düzenlenirler

Ekleme / değiştirme: zadd zset110.1 val1 Numarayı kontrol edin: zcard zset1 Sıralamayı kontrol edin: zrange zset10 2 withscores Bir değer sıralamasını görüntüleyin: zrank zset1 val2 Kodu kopyala

Küme gibi, sıralı küme de dizge türü elemanların bir koleksiyonudur, fark, her elemanın bir ağırlık ile ilişkilendirilmiş olmasıdır. Setteki elemanlar ağırlık sırasına göre elde edilebilir.

Sıralama seti türü durumlar için uygundur: Popüler gönderi (yanıt hacmi) bilgilerini alın: Mesaj sırasından * seçin * backnum desc limit 5; (Yukarıdaki gereksinimler basit sql deyimleri ile sağlanabilir, ancak sql deyimleri mysql veritabanı kaynaklarını tüketir)

Örnek olay: En popüler 5 gönderiyi almak için sıralama kümesini kullanın

Sıralanan kümedeki her öğe, bir değer ve ağırlık kombinasyonudur (önceki koleksiyon türünün her bir öğesi yalnızca bir değerdir)

Yalnızca 5 bilgi unsurunu tutan bir sıralama kümesi sıralama koleksiyonu yapıyoruz. 5 öğe en yüksek yanıt hacmidir. Her gönderi yanıtlandığında, koleksiyona girme şansı vardır, ancak yalnızca en yüksek yanıt hacmine sahip ilk 5 Koleksiyonda bir gönderi olacak ve düşük yanıt hacmine sahip olan silinecek.

127.0.0.1:6379 > 2 seçin tamam 127.0.0.1:6379 > zadd hotmessage 10211 // ekle (tamsayı) 1127.0.0.1:6379 > zadd hotmessage 14112 (tamsayı) 1127.0.0.1:6379 > zadd hotmessage 15913 (tamsayı) 1127.0.0.1:6379 > zadd hotmessage 7214 (tamsayı) 1127.0.0.1:6379 > zadd hotmessage 20315 (tamsayı) 1127.0.0.1:6379 > anahtarlar * 1) "sıcak mesaj" 127.0.0.1:6379 > zrevrange hotmessage 0100 // Ağırlık sırasına göre yüksekten düşüğe doğru belirli eleman değerleri hakkında bilgi almak için 1) "15" 2) "13" 3) "12" 4) "11" 5) "14" 127.0.0.1:6379 > zadd hotmessage 18916 (tamsayı) 1127.0.0.1:6379 > zrevrange hotmessage 01001) "15" 2) "16" 3) "13" 4) "12" 5) "11" 6) "14" 127.0.0.1:6379 > zremrangebyrank hotmessage 00 (tamsayı) 1 // En düşük ağırlığa sahip olanı sil 00, birinci hakkı silmek anlamına gelir; 01, birinci ve ikinci hakkı silmek anlamına gelir; 127.0.0.1:6379 > zrevrange hotmessage 01001) "15" 2) "16" 3) "13" 4) "12" 5) "11" 127.0.0.1:6379 > zrank hotmessage 12 // Element sıralamasını düşükten yükseğe alın (tamsayı) 1127.0.0.1:6379 > zrank hotmessage 11 (tamsayı) 0127.0.0.1:6379 > zrevrank hotmessage 13 // Element sıralamasını yüksekten düşüğe doğru alın (tam sayı) 2127.0.0.1:6379 > zcard hotmessage // Koleksiyondaki öğe sayısını alın (tam sayı) 5127.0.0.1:6379 > zscore hotmessage 16 // Eleman değerine göre ilgili ağırlığı elde edin "189" 127.0.0.1:6379 > zincrby hotmessage 10012 // Belirtilen eleman değerine bazı ağırlık bilgileri ekleyin "241" 127.0.0.1:6379 > zrevrange hotmessage 01001) "12" 2) "15" 3) "16" 4) "13" 5) "11" 127.0.0.1:6379 > Kodu kopyala

Birlikte çalışın, bilgi paylaşın

Bu makale, Redis'in beş veri türünü basit bir şekilde tanıtır ve birçok pratik örnekle Redis'in kullanımını gösterir. Ek olarak, Redis'in optimizasyon yöntemlerini ve genişletme yöntemlerini de açıklar.

Üç bölümden oluşur; İlk bölüm Redis'i tanıtıyor , Redis'in temel kullanımını, sahip olduğu beş veri yapısını ve beş veri yapısını çalıştırma komutlarını açıklar ve makale toplama web siteleri, çerezler, alışveriş sepetleri ve web önbellekleri oluşturmak için Redis'in nasıl kullanılacağını ayrıntılı olarak açıklar. Veritabanı satır önbelleği gibi bir dizi program. İkinci bölüm, Redis komutlarına daha ayrıntılı bir giriş sağlar , Ve daha karmaşık yardımcı araçlar ve uygulamalar oluşturmak için Redis'in nasıl kullanılacağını ve son olarak basit bir sosyal ağ sitesi oluşturmak için Redis'in nasıl kullanılacağını gösterdi. Üçüncü bölüm, Redis kullanıcılarının sıklıkla karşılaşacağı bazı sorunları tanıtır. , Redis bellek kullanımını azaltma yöntemini, Redis performansını genişletme yöntemini ve Lua dili kullanarak komut dosyası programlama yöntemini açıklar.

Bu kitap yalnızca komut kullanımı gibi giriş konularını değil, aynı zamanda replikasyon, kümeleme ve performans genişletme gibi derinlemesine konuları da kapsar; bu nedenle, Redis'te acemi veya Redis konusunda biraz deneyime sahip bir kullanıcı olun, kitaptan yararlanabilmeniz gerekir.

Bu [Redis gerçek savaş belgesini] almanız gerekiyorsa, ücretsiz olarak almak için resmi hesabımı [Plain Waves Quiet as a Code] takip edebilirsiniz! (İçerik daha ayrıntılıdır, bu nedenle bilgi noktalarının kaba bir ekran görüntüsü gösterilir)

1. Redis'e Giriş

1.1: Redis'in ilk tanınması

  • Redis'e giriş (redis ile diğer veritabanları ve orijinal fiyat arasındaki karşılaştırma, ek özellikler, redis kullanım nedenleri)
  • Redis veri yapısına giriş (redis dizesi, redis listesi, redis koleksiyonu, redis hash, redis sıralı koleksiyon)

1.2: Web uygulamaları oluşturmak için Redis'i kullanın

  • Giriş ve çerez önbelleği
  • Bir alışveriş sepeti uygulamak için Redis'i kullanın
  • Web önbelleği
  • Veri hattı önbelleği
  • İnternet analizi

İki, Redis temel kavramları

2.1: redis komutu

  • Dize
  • Liste
  • Ayarlamak
  • Hash
  • Sıralı set
  • Yayınla ve Abone Ol
  • Diğer komutlar (sıralama, temel redis işlemi, anahtar süre sonu)

2.2: Veri Güvenliği ve Performans Garantisi

  • Kalıcılık seçenekleri
  • kopya
  • Sistem arızalarının ele alınması
  • Redis işlemi
  • İşlem dışı ardışık düzen
  • Performansla ilgili notlar

2.3: Destek programları oluşturmak için redis'i kullanın

  • Günlükleri kaydetmek için redis kullanın
  • Sayaçlar ve istatistikler
  • IP'nin şehrini ve ülkesini bulun
  • Hizmet geliştirme ve dağıtım

2.4: Uygulama bileşenleri oluşturmak için redis'i kullanın

  • Otomatik tamamlama
  • Dağıtılmış kilit
  • Semafor sayma
  • Görev sırası
  • Haber çekme
  • Dosya dağıtımı için redis kullanın
  • 2.5: Arama tabanlı uygulamalar

    • Redis kullanarak ara
    • Sıralı dizin
    • Reklam hedefleme
    • İş arama

    2.6: Basit bir sosyal ağ sitesi oluşturun

    • Kullanıcılar ve durum
    • Anasayfa zaman çizelgesi
    • Takipçi listesi ve takip listesi
    • Durum mesajlarını yayınlayın ve silin
    • Akış API'si

    Üç, Redis gelişmiş ayrıntılı açıklama

    3.1: Bellek kullanımını azaltın

    • Kısa yapı
    • Parça yapısı
    • Paketlenmiş ve depolanmış ikili bitler ve baytlar

    3.2: redis'i genişlet

    • Genişletilmiş okuma performansı
    • Yazma performansını ve bellek kapasitesini genişletin
    • Karmaşık sorguları genişletin

    3.3: Redis Lua komut dosyası programlama

    • C kodu yazmadan yeni özellikler ekleyin
    • Lua kullanarak kilitleri ve semaforları yeniden yazın
    • WATCH / MULTI / EXEC işlemini kaldır
    • Listeyi dilimlemek için Lua'yı kullanın

    Sonunda

    Bu [Redis gerçek savaş belgesini] almanız gerekiyorsa, makaleyi iletebilir ve özel mesajım olan "belge" yi ücretsiz olarak takip edebilirsiniz! (İçerik daha ayrıntılıdır, bu nedenle bilgi noktalarının kaba bir ekran görüntüsü gösterilir)

    Son olarak, çalışmalarınızda başarılar diliyorum, terfi almanızı ve maaşınızı artırmanızı, röportajı geçmenizi, yumuşak bir teklif almanızı ve en kısa sürede en sevdiğiniz işi bulmanızı diliyorum. ~

    Hala Tom kedi hakkında cahil misin? Bu Tomcat mimari analiz kitabına bir göz atın
    önceki
    Nginx girişinde ustalaşma, Nginx öğrenme deneyimi e-kitap paylaşımı
    Sonraki
    Shuangfei / üç lisans / teknik okuldan mezun olduktan sonra büyük bir fabrikaya girme şansınız var mı?
    Mimar, Bahar serisini pratik kitaplardan tavsiye ediyor ve okuduktan sonra, Bahar hakkında net bir anlayışa sahip oluyor.
    BAT teknik dokümantasyonu: Yay ailesi kovası, Docker, Redis e-kitabı
    A-hisseleri iyi bir başlangıç yaptı VS Moutai sert bir şekilde düştü, piyasa nasıl gidiyor?
    Boğa pazarı şiddetli kuş mu? On milyar yabancı yatırımcı bu hisse senetlerini kopyaladı; büyük adam teknoloji hisselerini 400 milyon yuan'a satın aldı, Zhang Jianping 900 milyon yuan sattı
    Bu şirket yıl sonunda 2 milyon göl manzaralı oda veriyor mu? Yanıt: Zor durumda olan çalışanlara yardım
    Bu 15 hikaye 2020'nin sırlarını gizliyor! Milyarder domuz çiftçisi muazzam bir kâr elde edecek mi?
    Çin'in kişi başına düşen GSYİH'si 10.000 ABD dolarını aşıyor; 2019'da A hisseleri kişi başına 100.000 kazanıyor ve 80'ler sonrası 90'lar demokratik bir güç haline geliyor
    Chongqing'deki 30 katlı bina alev aldı ve geliştiricinin yüzlerce adli riski vardı. Sektördeki uzmanlar yeterli park yeri olmadığını söyledi
    Merkez bankası 800 milyar serbest bıraktı, bahar pazarı doğrulandı
    Resimli | Vientiane güncellemesi çok yönlü bir şekilde hızlanıyor. Bu, Çin'in "iyileşme gücü"
    Genel Sekreter Hubei teftişinin önemli konuşmasını anlamak için 16 puan
    To Top