2012-01-28 40 views
4

我在我的服務器上安裝了redis,並實現了對基於PHP的Web應用程序內返回的數據的對象緩存。 PHP模型本質上執行一個相當複雜的查詢並返回一組詳細的數據。我測試了緩存,發現一切都按預期工作。我首先檢查密鑰是否存在於redis中。如果是這樣,redis將返回數據,模型將進行反序列化並返回以前緩存的數據。如果緩存已過期,則模型會執行sql查詢,返回數據並在redis中設置密鑰和序列化值。Redis with PHP - 實現數據緩存

所以這裏是我的問題。

  1. 我不確定如何基準測試,因爲它是基於瀏覽器的。那裏有哪些工具可以讓我得到一個合理的基準來比較緩存而不是緩存。我想可能是一個PHP腳本,通過curl調用api 1000次。

  2. 我在redis中實現了這個功能,因爲我曾經閱讀過使用redis緩存可以跨多個會話或訪問該站點的IP地址工作。例如,如果通過多個ip地址/用戶每小時訪問api 1000次,我假設這種方法將減少mysql服務器上的負載,並讓redis完成返回緩存數據的工作。任何人都可以對此有所瞭解嗎?我的假設是否有效?

所有評論,歡迎!

謝謝!

戴夫

回答

7

爲基準的網站,我會使用類似Siege,而不是寫一個特定的PHP腳本。

關於Redis使用情況,緩存Memcached或Redis等內存存儲中的內容現在非常普遍。 memcached和Redis都適用於此目的,但對於純緩存,memcached可以說更容易設置。每小時1000次僅代表3.6 TPS - 任何數據存儲(包括MySQL)都將支持此類流量,而不會有任何問題。現在,將此流量乘以100或1000,並且緩存層(memcached或Redis)將成爲強制保護您的數據庫。

要使用Redis進行緩存,您可能需要檢查EXPIRE命令,並查看配置文件中的maxmemory-policy參數。

+0

迪迪埃 - 比你的迴應!我一定會看看Siege。你對TPS是正確的 - 我只是想把它設置在一個合理的數量上進行基準測試,以查看緩存的效果。同時我也開始嘗試APC並取得了很好的成功,因爲我發現它也可以用於對象/數據緩存以及操作碼緩存。我可以嘗試兩種方法,並試用Siege作爲基準。另一方面,我在這裏是新的,並試圖給你一個投票,但我還沒有被允許。 – dnpage 2012-02-02 19:44:35

0

我已經爲Zend_Cache庫完成了緩存後端的extensive testing。測試使用多個php-cli進程和隨機數據完成,並考慮讀取性能,寫入性能和緩存標記清理性能。如果僅測試緩存後端,則Web服務器的性能不相關,因此我建議通過CLI進行測試以簡化測試。另外,僅使用一個進程進行測試並不能讓您準確瞭解重負載下的後端特性。

MySQL本身速度非常快,如果你正在做單記錄索引查詢,那麼MySQL自己的查詢緩存將非常快。我只建議爲緩慢的事情添加額外的緩存層(多個查詢的聚合結果或生成HTML塊)。您可以使用Zend_Cache而不包括整個Zend框架,所以我強烈建議您查看Cm_Cache_Backend_RedisCm_Cache_Backend_File