2010-06-14 46 views
4

我正在研究PHP中的一些舊(ish)軟件,它維護一個$ cache數組以減少SQL查詢的數量。我正在考慮將memcached放在原位,我想知道是否要擺脫內部緩存。如果我保持內部緩存,或者memcached足夠了,那麼仍然會有值得的性能提升嗎?Memcached與PHP中的內部緩存?

+1

基準應用程序的範圍內,不同的方法和走着瞧吧。 – salathe 2010-06-14 14:08:44

+0

它如何維護頁面瀏覽中的'$ cache'數組?它被序列化爲一個文件嗎?它是否存儲在APC/Eaccelerator/Memcached/DB/etc中? – ircmaxell 2010-06-14 14:10:02

+0

看來目前的方法是無用的,需要審查。 緩存在一個腳本運行時中有什麼用處?它看起來比緩存中真正需要的設計更差。 這個應用程序真的需要任何緩存嗎? – 2010-06-14 14:32:24

回答

4

memcache(在金屬上實現)似乎可能比一些php解釋緩存方案更快。

但是:如果沒有損壞,請不要修復它。

如果您刪除自定義高速緩存代碼,則可能需要處理其他依賴於高速緩存的代碼。我不能說你必須維護的代碼的質量,但它似乎是那些「可能不值得」的東西之一。

讓我這樣說:您是否相信原始開發人員已經編寫了代碼,如果您撕掉緩存,這些代碼仍然可以工作?(我可能不會)

所以,除非現有的緩存給你的問題,我會建議不要把它拿出來。

+3

您如何看待Memcache將比解釋系統更快(一般情況下)?它涉及到TCP通信...... Memcache比查詢數據庫要快,因爲它們都訪問了網絡,但它不一定比從磁盤讀取一個php文件更快('foo = include('myfoofile.php');'where myfoofile。 php包含'<?php返回數組('blah','blah','blah');')。兩者都需要分配內存,但只有php文件可以利用本地操作碼緩存... – ircmaxell 2010-06-14 14:14:06

+0

偉大的建議......情況是,主要開發人員離開了我(新人!)亂七八糟的無證代碼。緩存根本沒有封裝,它是代碼中引用數千次的全局變量,真正影響可讀性和不良設計的可讀性,所以從體系結構的角度來看(在我看來!)它被破壞了:-) – bcoughlan 2010-06-14 15:01:10

+0

@ircmaxell:我假設兩人都打網絡,因爲他的問題是關於數據庫訪問。 – Kris 2010-06-14 15:20:36

1

有沒有在使用內存緩存VS如果本地緩存的優勢:

1)你有逃跑相同的數據庫多張網絡服務器,並已內存緩存設置爲跨多個節點

2)數據庫不運行不執行查詢結果緩存或訪問速度很慢

否則,除非緩存代碼非常差,否則您不應該期望看到很多性能優勢。

HTH

C.

5

根據this博客文章,PHP的內部數組比任何其他方法更快的方式:

Cache Type    Cache Gets/sec 

Array Cache      365000 
APC Cache       98000 
File Cache       27000 
Memcached Cache (TCP/IP)   12200 
MySQL Query Cache (TCP/IP)   9900 
MySQL Query Cache (Unix Socket) 13500 
Selecting from table (TCP/IP)  5100 
Selecting from table (Unix Socket) 7400 
+1

我有很多這樣的陣列式緩存。它確實更快。但是,我正在慢慢地介紹MemCache,原因有兩個: 1)這些數組中的一些以某種方式在其他腳本中複製,使用MemCache將統一此 2)。即使數組速度更快,它們也會消耗內存,數組越大,內存越多。 MemCache足夠快。 **總之:對我而言,我決定使用MemCache。有時候我會保持一段時間,幾個星期後添加TODO評論並刪除陣列。希望這有幫助 – tanovellino 2018-01-03 09:13:21

+0

Redis也非常有趣,特別是能夠將數據存儲在磁盤上,並且可以輕鬆同步多個服務器之間的數據。 如果你想用php實現高性能,那麼我建議查看[Swoole](https://github.com/swoole/swoole-src)。對於任何緩存頁面,響應時間都非常短(在我的電腦上,redis緩存的html頁面在swoole中加載時間約爲2ms,而不是傳統php7中的~10ms--服務器是[h2o](https:// h20)。 examp1e.net/)在這兩種情況下,頁面被加載到Firefox中)。 – 2018-01-03 13:22:26