memcache veri almak

6 Cevap php

Ben memcache yararlarını öğrenmek için başladım ve benim proje üzerinde uygulamak istiyorum. Ben bu tür veri böylece bir anahtar tarafından alınır ve nasıl gibi, bunun çoğu anladım.

Şimdi ben memcache onun tüm detayları ile bir yazı koymak ve tuşuna POST:123, bu Tamam diyoruz ki olsun, ve ben her yazı için bunu yapabilirsiniz.

Ben kendi başlıkları ile tüm mesajların listesini almak için posts tablosunu sorgulamak Ama nasıl durum ile başa çıkmak için. Bu memcache ile yapılabilir, ya da bu her tablodan sorgulanan olmalıdır?

6 Cevap

Memcache size tarif ettik, böylece siz (yani, bazı filtreler dayalı sonuçlar bilinmeyen bir listesi sorgulama ve iade için kullanılmaz almak istediğiniz tam olarak ne veri bildiği zaman, bu genellikle kullanılan bir anahtar-değer önbellek .)

Genel olarak, hedef optimizasyon gerekli değildir, özellikle de memcache çağrıları ile tüm veri tabanı sorguları değiştirmek için değildir.

Verileri tek bir değer sığmaz, ve size tablodaki tüm verilere hızlı erişim için bir ihtiyaç var mı varsayarsak, bir zaman damgası aralık gibi bazı yığın-değere dayalı tuşları içine damping düşünebiliriz.

Ancak, (biz tüm güncelleştirmeleri yazar tek bir sunucu bahsediyoruz eğer) veritabanı sorgusu tutmak veya doğrudan belleğe yüklemek ya en iyisi.

Siz "1,2,3,4,10,12" değeri ile "mesaj" adlı bir anahtar var ve güncellemek, her zaman yeni Mesaja oluşturulduğunda, güncellendiğinde silindi onu almak olabilir.

Her durumda, memcached (hızlı ve ona ölçeklenebilir) bir anahtar / değer saklama var, bir veritabanı yedek değil. Yani veri DB saklamak için ne karar vermek zorunda ve memcached için boşaltma ne.

Alternatif (hatta memcached olarak) belleğinde AcriveRecord önbelleğe aracılığıyla yazma / okuma yapacak olan "cachemoney" eklentisini kullanabilirsiniz

Look at the cache_money gem from Twitter. This gem adds caching at the ActiveRecord level. The find calls by id will go through the cache. You can add support for indexing by other fields in your table (i.e. title in your case)

class Post < ActiveRecord::Base
  index :title
end

Şimdi find başlığa göre filtre önbellek aracılığıyla gidecek çağırır.

Post.all(:conditions => {:title => "xxxx"})

Yapmanız gereken Temelde ne o size gereken bilgileri olup olmadığını görmek için ilk önbelleğini kontrol edin. Orada hiçbir şey önbelleğinde (veya önbelleğe alınan veriler bayat ise), o zaman tabloyu sorgulamak ve önbellek döndürülen verileri yerleştirmek, hem de ön ucuna dönüş bunu yapmanız gerekir.

Bu yardımcı olur mu?

Sen memcached içindekileri numaralandırmak değil - bunu denemek şekilde yapmak için tasarlanmış değil. SQL sorguları yerine tek kayıtlarının tam sonuç kümesini saklamak gerekir.

Yani, evet: Bir SELECT title FROM posts yapın ve memcached de sonucu depolamak (örn. olarak POSTS:ALL_UNORDERED). Bu tasarlanmış nasıl. Ve evet, gibi tek bir kayıtları sorgulama eğer SELECT * FROM posts WHERE id = XX o saklayın. Sadece gerçekleştirmek her sorgu için benzersiz memcached anahtarları oluşturmak için unutmayın.

Bildiğim kadarıyla birden anahtarları ve değerleri için sorgu olamaz. Eğer sık ​​sık mesaj aynı listesine erişmek için gerekirse Ama, neden sizin memcache "mesaj" gibi bir tuş ile bu tutmayın.