Nasıl algılamak ve hata ayıklama bayat önbellek girdileri?

3 Cevap php

PHP db-okur önlemek için ağır önbelleğe alma için çalışıyor ile memcached kullanıyorum. Bir güncelleme (uygulama geçersiz kılar) önbelleği geçersiz ediyorum. Ancak, bayat önbellek verileri, büyük bir sorun haline geliyor. Çoğunlukla, bu (yanlış bir tuşa veya bir güncelleme üzerinde önbellek girdisi geçersiz unutmadan geçersiz) yitirilmelerine hatadan kaynaklanmaktadır.

Debug / geliştirme / üretim sırasında hataların bu tür algılamak için herhangi bir iyi bir yöntem var mı?

3 Cevap

Yapılacak en iyi şey, mysql_query etrafında sarıcı işlevi koymaktır. Bunun içinde, sadece sorgu bir güncelleştirme veya önbelleğe alınmış tabloya bir silme olup olmadığını kontrol edin ve değişti ediliyor anahtarları ayrıştırmak. Bu, yazmak için uzun zaman alır test etmek kolaydır, ve sen asla bir önbellek invalidation unutmadan engelleyecektir olmaz.

Bir tablo (zaman damgası veya eşdeğer, ya da sadece düz int ya) bir daha sütun ekleme ve güncellemeler yaparken onu kullanmayı gerektirir iyimser eşzamanlılık kontrolü kullanabilirsiniz. Burada (bir "sürüm etiketi" olmanın düz int durumunda) kullanmak nasıl bulunuyor:

update BlogPost set PublishedOn = :publishedOn, VersionTag = VersionTag + 1
where ID = :id and VersionTag = :versionTag

Ve zaman damgası DBMS tarafından otomatik olarak güncellenir varsayarak, bu o zaman damgaları ile yapılır nasıl:

update BlogPost set PublishedOn = :publishedOn
where ID = :id and Timestamp = :timestamp

İki getirir yapar, hangi uygulamanızda (üretim sırasında devre dışı bırakılır) hata ayıklama kodu eklemek olabilir - memcached bir ve DB biri, onları karşılaştırır ve bunlar farklı ise bir istisna / logfile hata yazar atar. (Bazı performans kaybı ile) bu şekilde hızla eski verileri izleyebilirsiniz.

Tabii ki, bu daha da rafine olabilir:

  • Bir zaman damgası alanı ekleme ve damgaları tanımlanmış bir değere daha yakın eğer bir hata atmak değil (belki süreç önbelleğini güncellemek için zaman yoktu)
  • Güncelleme kaynağını (script / hat numarası) belirten DB bir alan ekleyin. Bu önbellek geçersizlik bölümünü özlüyor kısmını aşağı izleme yardımcı olabilir