Nasıl PDO ve memcached kullanarak bir önbellek sistemi tasarlayabilirsiniz?

2 Cevap php

Ben memcached uygulamak istiyorum bir sistem veritabanına bağlantı için PDO kullanıyorum.

Ben (hazırlanan ifadeleri nedeniyle) PDO ile son sorgunun dize alınamıyor çünkü sonuçlarını önbelleğe alma için kullanmak hangi tuşları bilmiyorum.

Için herhangi bir iyi bir fikir bu sorunu çözmek?

Şimdiden teşekkürler.

2 Cevap

Sadece sorgu dizesinde dayalı doğrudan sorgu sonuçlarını önbelleğe için gidiyoruz eğer, Mysql sorgu önbellek zaten sizin için yapar. Tekerleği yeniden icat etmeyin. Bir potansiyel farkı bayat (out of date, yanlış) verileri asla geri döndü böylece Mysql sorgu önbellek agresif geçersiz olduğunu; Eğer kaybedilmemesi nasıl ele bağlı olarak, strateji ayrıca düzenli olarak güncel veriler üzerinden, veritabanı yükünü azaltmak, ama eski hizmet pahasına olabilir.

Ayrıca, gerçekten güncellemeler (? Nasıl bir ekleme / güncelleştirme çalıştırdığında sorgu dizeleri dolmuş gerektiğini bilemez) ne zaman seçici çeşitli önbellek anahtarlarını sona mümkün olmayacaktır; bir sonucu olarak, sadece bayat verileri hizmet konum süreyi en aza indirmek için, (muhtemelen saniye) kısa bir zaman aşımı süresi ayarlamak gerekir. Bu muhtemelen düşük önbellek isabet oranı anlamına gelecektir. Sonunda, size tarif önbelleğe alma stratejisi uygulamak için basit, ama çok etkili değil.

"Generic Design Approaches" section memecached SSS okumak için emin olun. İyi bir önbellek stratejidir güncellemeler ortaya çıktığında / derhal önbelleğe verileri değiştirir siler - bu saat / gün / hafta için verileri önbelleğe ve aynı anda kullanıcılara tarih verileri üzerinden hizmet asla izin verir.

İşte ilginç öğretici faydalı olabileceğini olduğunu - http://techportal.inviqa.com/2009/02/16/getting-started-with-memcached/

Ben böyle bir işlevi uygulayarak işlemi otomatik sanırım:

function query($name, $sql, $params, $db, $cache) {
    $result = $this->cache->get($name);

    if (!$result) {
        $stmt = $db->prepare($sql);
        $exec = $stmt->execute($params);
        $result = $stmt->fetch(PDO::FETCH_ASSOC);

        $cache->add($name, $result);
    }

    return $result;
}