Eşzamanlılık kolları PHP Sayfa önbellek?

4 Cevap php

Ben önceki PHP önbelleğe alma hakkında burada cevaplar, ve onlar için link makaleler okudum. Ben sık sık tavsiye edilen Pear Cache_Light, QuickCache ve WordPress Super Cache teslim ettik. (Özür dilerim - görünüşe göre ben sadece bir kez köprüye izin ediyorum.)

Eşzamanlılık sorunları, ya da hiçbiri hiçbiri anlaşma açıkça onların belgelerinde yapmak olduğunu sesleniyorum ya.

Herkes eşzamanlılık kolları bir PHP sayfası önbellek yönde beni işaret edebilir?

Bu paylaşılan bir bilgisayar üzerinde, yani memcache ve kodu önbelleklerini ne yazık ki bir seçenek değildir. Ben bir çiftleşmiş motoru kullanmayın ve tek bir bağımlılık alarak önlemek istiyorum. Yani Apache onlara hizmet vermek wwwroot altında statik dosyaları depolamak - - ama değil bir gereklilik WP Super Cache yaklaşımı tercih edilir.

Teşekkürler!

P.S. Otomatik olarak ele alınmalıdır şeyler örnekler:

  1. Apache / PHP önbellek önbelleğe alınmış bir dosya okuma ortasında. Önbelleğe alınmış dosya eskimiş ve silme denenir.
  2. O eski olduğu için önbelleğe alınmış bir dosya silindi. O dosya için bir istek gelir, ve dosya yeniden olma sürecinde. Dosya için Another isteği bu dönemde geliyor.

4 Cevap

Ben mevcut zula birini değiştirmek için cazip olacaktır. Zend Framework önbellek hile yapmak gerekir. Eğer değilse, bunu değiştirmek istiyorsunuz.

Sen gerçekten ilkel kilitleme stratejisi oluşturmak olabilir. Veritabanı, önbelleğe alınan tüm öğeleri izlemek güncelleme için kilitleme izin, insanlar, tamamlamak için başkasının güncelleme için beklemek izin için kullanılabilir ...

Bu sizin ASİT konuları ele olacaktır. Eğer çok kısa bir süre için başkasının güncelleme için kilit ayarlamak, ya da muhtemelen sadece sunucu yük / kapasite ve önbelleğe alınmış içerik üreten maliyetine bağlı olarak bu tur gezisi için tamamen önbelleğini atlamak olabilir.

Jacob

Assuming a Journalling Filesystem (most Linux Filesystems, and NTFS) - then the file should not be seen as "created" until the process closes the file. This should show up as a non-existant file!

Nope, it is visible as soon as it is created, you have to lock it. Rename is atomic though. So you could open(), write(), close(), rename(), but this will not prevent the same cache item being re-created twice at the same time.

A cached file was deleted because it was obsolete. A request for that file comes in, and the file is in the process of being recreated. Another request for the file comes in during this.

Kilitli değilse, yarım-tam dosya servis edilecektir, ya da iki süreç "ilginç" sonuçlar veren, aynı anda aynı dosyayı yeniden oluşturmak için çalışacağız.

It seems PEAR::Cache_Lite has some kind of security to deal with concurrency issues.
If you take a look at the manual of constructor Cache_Lite::Cache_Lite, you have those options :

fileLocking enable / disable fileLocking. Can avoid cache corruption under bad circumstances.

writeControl enable / disable write control. Enable write control will lightly slow the cache writing but not the cache reading. Write control can detect some corrupt cache files but maybe it's not a perfect control.

readControl enable / disable read control. If enabled, a control key is embeded in cache file and this key is compared with the one calculated after the reading

readControlType Type of read control (only if read control is enabled). Must be 'md5' (for a md5 hash control (best but slowest)), 'crc32' (for a crc32 hash control (lightly less safe but faster)) or 'strlen' (for a length only test (fastest))

Hangisini kullanmak size kalmış hala ve feda etmeye hazırız performansı ne tür bağlıdır - ve eşzamanlılık erişim riski muhtemelen uygulamanın varolduğunu.


You might also want to take a look at Zend_Cache_Frontend_Output, to cache a page, using something like Zend_Cache_Backend_File as backend.

Yani bir de güvenlik çeşit destek gibi görünüyor - şeyler aynı kinf o Cache_Lite zaten (so I won't copy-paste a second time) verdi


As a sidenote, if your website runs on a shared host, I suppose it doesn't have that many users ? So the risks of concurrent access are probably not that high, are they ?

Neyse, sanırım herhangi bir uzak aramak değil ki ne o yedekte Altyapıları öneriyoruz: it :-) uygulamanızın ihtiyaçları için zaten yeterli muhtemelen daha olduğunu

(I've never seen any caching mecanism "more secure" than what those allow you to do... And i've never run into some catastrophic concurrency problem of that sort yet... In 3 years of PHP-development)


Anyway : have fun !

Sen sadece basit bir "isim, değer" masa ve üzerinde mağaza önbelleğe sayfaları oluşturmak, veritabanında sayfaları önbelleğe olabilir.