天天看點

站點緩存magento緩存系列詳解:實施正确的緩存政策及不同緩存結構分析

在寫這篇文章之前,xxx已經寫過了幾篇關于改站點緩存主題的文章,想要了解的朋友可以去翻一下之前的文章

    本篇文章重要分析一下在maegnto裡cache(File System, APC, Memcached, Redis)的應用,及在不同的伺服器環境中改怎麼應用讓其能性到達最好。

    解理magento的Two-Level Caching

    magento默許應用zend framework的二層緩存存儲式方。就是說它應用兩層構結對cache停止配合理管,一個快的,但小大有制限的構結是一層比如APC或者Memcached ,一個比較慢的構結作為第二層比如file system.每一種存儲構結各有利弊,要不同情況不同分析應用,APC 和 Memcached 是應用 key/value來存儲cache,他們都不持支tag。File system 和Redis 持支tag. 

    magento二級緩存構結工作流程圖示 (Thanks to Fabrizio Branca):

站點緩存magento緩存系列詳解:實施正确的緩存政策及不同緩存結構分析

    magento自帶的各種後端緩存分析:

File system (var/cache)

默許情況下,Magento 将它的緩存目條存儲在file系統中,在var/cache/下可檢視。這類情況很合适小型的,資料量不大的站點。但是對于大型的站點,随着浏覽量的一直增多,對file的讀寫作操也将越來越多,站點也會越來越慢。magento是由tags來對cache停止織組理管的,這意味着可以對某一個cache組(同相的tag為一個group)停止作操。

長處:這是默許的,不要需裝額定的件軟

缺陷:清除cache依賴于tag,常通修改某個product或理處某個order完以後,對應的前台頁面都要需更新緩存。每次更新緩存時,都要需根據tag停止有所目條即file停止查找,試想如果站點有多于1000個product,個整cache的小大将會大于50MB,大約有3500個file,你能象想到每次更新cache都要對3500個file停止查找有多慢嗎。

小提示

1:應用SSD替換一般硬碟

2:把var/cache接入tmpfs

    ----------------------------------------------------------------------------------------------------------------------------------

    APC – Alternative PHP Cache (Key/Value)

    APC是一個收費,源開且強壯的架框用來緩存和化優 PHP 的中間代碼。

長處:相對file cache system是很快了

缺陷:不持支tag,是以然依要需file system作為slow level cache。伺服器要需安裝PHP APC 塊模

小提示:保确有夠足的記憶體給APC ,可在 php.ini 中修改數參apc.shm_size

    Configuration (app/etc/local.xml)

<global>
  ...
  <cache>
    <backend>apc</backend>
      <prefix>mgt_</prefix>
  </cache>
  ...
</global>      

    Settings for php.ini

apc.enabled = 1
apc.optimization  = 0
apc.shm_segments = 1
apc.shm_size = 768M
apc.ttl = 48000
apc.user_ttl  = 48000
apc.num_files_hint = 8096
apc.user_entries_hint = 8096
apc.mmap_file_mask = /tmp/apc.XXXXXX
apc.enable_cli = 1
apc.cache_by_default  = 1
apc.max_file_size = 10M
apc.include_once_override = 0      

    ---------------------------------------------------------------------------------------------------------------------------

    Memcached (Key/Value)

    Memcache是一個高能性的分布式的記憶體對象緩存系統,通過在記憶體裡維護一個一統的偉大的hash表,它能夠用來存儲各種格式的資料,括包圖像、視訊、檔案以及資料庫檢索的結果等。單簡的說就是将資料調用到記憶體中,然後從記憶體中取讀,進而大大提高取讀速度。

    長處:更快的存取速度

    缺陷:不持支tag,是以然依要需file system作為slow level cache

    需求:1:Memcached server 2: PHP extension for memcached

    每日一道理

古人雲:“海納百川,有容乃大。”人世間,不可能沒有沖突和争吵,我們要以磊落的胸懷和寬容的微笑去對面它 。哈伯德也曾說過:“寬恕和受寬恕的難以言喻的快樂,是連神明都會為之羨慕的極大樂事。”讓我們從寬容中享受快樂,從諒解中體會幸福吧!

<global>
...
<cache>
  <backend>memcached</backend><!-- apc / memcached / empty=file -->
  <memcached><!-- memcached cache backend related config -->
    <servers><!-- any number of server nodes can be included -->
      <server>
        <host><![CDATA[127.0.0.1]]></host>
        <port><![CDATA[11211]]></port>
        <persistent><![CDATA[1]]></persistent>
        </server>
    </servers>
    <compression><![CDATA[0]]></compression>
    <cache_dir><![CDATA[]]></cache_dir>
    <hashed_directory_level><![CDATA[]]></hashed_directory_level>
    <hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
    <file_name_prefix><![CDATA[]]></file_name_prefix>
  </memcached>
</cache>
...
</global>      

    ---------------------------------------------------------------------------------------------------------------------

    Redis – Advanced key-value store with full cache tag support

magento答應我們應用redis server作為中心存儲倉庫,它持支tag的應用,是以不再要需file system作為slow level cache。在多伺服器多站點環境中,強烈薦推應用redis

,用一個中心緩存倉庫,對有所server cache停止理管。

長處:快;持支tag;已在一個日均ip為500000的站點做過測試,能性極好且穩定。

需求:1:伺服器上要需裝Redis 2:PHP 擴充 phpredis 要需安裝 3:Magento擴充“Cm_Cache_Backend_Redis”要需安裝

    Installation

    1. Install redis (2.4+ required)

2. Install phpredis

3. Install the magento extension “Cm_Cache_Backend_Redis”

4. Edit your app/etc/local.xml

<global>
...
<cache>
  <backend>Cm_Cache_Backend_Redis</backend>
  <backend_options>
    <server>127.0.0.1</server> <!-- or absolute path to unix socket -->
    <port>6379</port>
    <persistent></persistent>
    <database>0</database>
    <password></password>
    <force_standalone>0</force_standalone>
    <connect_retries>1</connect_retries>
    <automatic_cleaning_factor>0</automatic_cleaning_factor>
    <compress_data>1</compress_data>
    <compress_tags>1</compress_tags>
    <compress_threshold>20480</compress_threshold>
    <compression_lib>gzip</compression_lib> <!-- Supports gzip, lzf and snappy -->
  </backend_options>
</cache>
...
</global>      

    Useful tool for redis

    phpRedisAdmin

    phpRedisAdmin 是一個單簡作操界對面 Redis databases停止作操

Demo: http://dubbelboer.com/phpRedisAdmin/?overview

站點緩存magento緩存系列詳解:實施正确的緩存政策及不同緩存結構分析

    結總

小型站點應用APC + file system(作為slow level cache)便可,此外薦推應用SSD和把var/cache/放入tmpfs。

對于大型站點薦推應用redis, 即便cache file到達 500 MB,它然依很快,在多伺服器環境中,Redis 也是很美完的選擇。

    載轉請注标jonas的magento部落格