SORU
13 NİSAN 2012, Cuma


Redis sadece bir önbellek?

Bazı Redis docs okuma ve http://try.redis-db.com/ öğretici çalışıyorum. Şimdiye kadar, Hız veya Kurumsal Kütüphane Önbellekleme Çerçeve gibi Redis önbelleği ve teknoloji arasında herhangi bir fark göremiyorum

Etkili sadece bellek veri deposu, benzersiz bir anahtar kullanarak nesneleri ekliyorsun. Herhangi bir ilişkisel semantik görünmüyor

Neyi kaçırıyorum?

CEVAP
13 NİSAN 2012, Cuma


Hayır, Redis önbelleği çok daha fazladır.

Bir Önbellek gibi, depolar anahtar=değer çiftleri Redis. Ama bir önbellek aksine, Redis değerleri üzerinde çalıştırmanıza olanak sağlar. Redis 5 veri türleri, string, Ayarlar, Karma, Listeler ve Sıralı Kümesi vardır. Her bir veri türü çeşitli işlemler sunar.

Redis anlamanın en iyi yolu bir veritabanında saklamak için gidiyoruz ne düşünmeden bir uygulama modeli.

İnşa etmek istediğimizi söyle. StackOverflow.com sağlar. Basit tutmak için, Sorular, Cevaplar, Etiketler ve Kullanıcılar ihtiyacımız var.

Modelleme Soruları, Kullanıcılar ve Cevaplar

Her nesnenin bir Harita olarak modellenmiş olabilir. Örneğin, bir Soru alanlar {,, date_asked,, asked_by, kimliği adı oy durumu} ile bir harita. Benzer şekilde, bir Cevap alanlar {, question_id, answer_text, answered_by, oy, durum kodu} ile bir harita. Benzer şekilde, bir kullanıcı nesnesi modeli olabiliriz.

Bu nesnelerin her biri doğrudan bir Karma olarak Redis saklanabilir. Benzersiz bir kimlik oluşturmak için, atom artış komutunu kullanabilirsiniz. Bunun gibi bir şey

$ HINCRBY unique_ids question 1
(integer) 1
$ HMSET question:1 title "Is Redis just a cache?" asked_by 12 votes 0
OK

$ HINCRBY unique_ids answer 1
(integer) 1
$ HMSET answer:1 question_id 1 answer_text "No, its a lot more" answered_by 15 votes 1
OK

Oy Kullanma

Birisi bir soru veya bir cevap upvotes her şimdi, sadece bunu yapmak gerekir

$ HINCRBY question:1 votes 1
(integer) 1
$ HINCRBY question:1 votes 1
(integer) 2

Ana Sayfa için bir Soru listesi

Sonraki, ana sayfasında gösterilecek en son soru depolamak istiyor. Eğer bir yazı olsaydı .NET ya da Java programı, bir Liste soru deposu. Redis bu saklamak için en iyi yol olduğu ortaya çıktı.

Her zaman birisi bir şey sorarsa, listeye kendi kimliği ekleyin.

$ lpush questions question:1
(integer) 1
$ lpush questions question:2
(integer) 1

Ana işlemek için istediğiniz zaman şimdi, en son 25 soru için Redis soruyorsun.

$ lrange questions 0 24
1) "question:100"
2) "question:99"
3) "question:98"
4) "question:97"
5) "question:96"
...
25) "question:76"

Kimlikleri var şimdi, Redis ardışık kullanarak öğeleri almak ve kullanıcıya göstermek.

Etiketlere göre sorular, Oy sıralaması

Sonra, her bir etiket için soru almak istiyoruz. Ama sen üst her etiket altında sorular, yeni sorular ya cevapsız sorular oy görmenizi sağlar.

Bu model için, Redis' Sıralanmış Ayarlama özelliği. kullanıyoruz Sıralanmış bir dizi her öğe ile ilişkilendirmek için bir puan verir. Sonra elemanları puanlarına göre alabilirsiniz.

İleriye gidelim ve Redis etiketi için bunu yapın

$ zadd questions_by_votes_tagged:redis 2 question:1 
(integer) 1
$ zadd questions_by_votes_tagged:redis 10 question:2 
(integer) 1
$ zadd questions_by_votes_tagged:redis 5 question:613 
(integer) 1
$ zrange questions_by_votes_tagged:redis 0 5 
1) "question:1"
2) "question:613"
3) "question:2"
$ zrevrange questions_by_votes_tagged:redis 0 5 
1) "question:2"
2) "question:613"
3) "question:1"

Biz burada ne yaptı? Sıralanmış bir dizi soru ekledik ve bir puan (oy sayısı) her soru için ilgili. Her zaman bir soru upvoted alır, puanı artırmak olacaktır. Ve bir kullanıcı ne zaman", biz sadece zrevrange yapmak ve üst soru geri. "Soru Redis etiketli, oy sıralaması tıklama

Ferahlatıcı sayfası olmadan Sorular gerçek zamanlı

Ve son olarak, bir bonus. Soruları sayfa açık kalsın, yeni bir soru eklendiğinde sizi haberdar ederiz. Nasıl yardım Redis?

Redis pub-sub modeli var. Kanallar, örneğin oluşturabilirsiniz"". channel_questions_tagged_redis Daha sonra 11* *belirli bir kanal için kullanıcılar. Yeni bir soru eklendiğinde, 12* *bu kanal için bir mesaj olur. Ardından, tüm kullanıcılar için mesaj. Web yuva veya kuyruklu yıldız gibi bir web teknolojisi aslında tarayıcıya mesaj iletmek için kullanmak zorunda olacak, ama Redis sunucu tarafında tüm tesisat ile yardımcı olur.

Dayanıklılık, Güvenilirlik vb.

Bir Önbellek aksine, Redis, sabit diskteki verileri devam etmektedir. Daha iyi güvenilirlik sağlamak için master-slave kurulum olabilir. Daha fazla bilgi için, Sebat ve Çoğaltma konuları buraya - http://redis.io/documentation

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alan Fullmer

    Alan Fullmer

    3 EYLÜL 2010
  • Branboy3

    Branboy3

    12 AĞUSTOS 2012
  • EEVblog2

    EEVblog2

    2 HAZİRAN 2014