日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php可选缓存APC

發布時間:2023/12/4 php 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php可选缓存APC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、APC緩存簡介

APC,全稱是Alternative PHP Cache,官方翻譯叫”可選PHP緩存”。它為我們提供了緩存和優化PHP的中間代碼的框架。 APC的緩存分兩部分:系統緩存和用戶數據緩存。

系統緩存

它是指APC把PHP文件源碼的編譯結果緩存起來,然后在每次調用時先對比時間標記。如果未過期,則使用緩存的中間代碼運行。默認緩存 3600s(一小時)。但是這樣仍會浪費大量CPU時間。因此可以在php.ini中設置system緩存為永不過期(apc.ttl=0)。不過如果這樣設置,改運php代碼后需要重啟WEB服務器。目前使用較多的是指此類緩存。

用戶數據緩存

緩存由用戶在編寫PHP代碼時用apc_store和apc_fetch函數操作讀取、寫入的。如果數據量不大的話,可以一試。如果數據量大,使用類似memcache此類的更加專著的內存緩存方案會更好

緩存key生成規則

APC的緩存中的每個slot都會有一個key,key是 apc_cache_key_t結構體類型,除了key相關的屬性,關鍵是h字段的生成。 h字段決定了此元素落于slots數組的哪一個位置。對于用戶緩存和系統緩存,其生成規則不同。 用戶緩存通過apc_cache_make_user_key函數生成key。通過用戶傳遞進來的key字符串,依賴PHP內核中的hash函數(PHP的hashtable所使用的hash函數:zend_inline_hash_func),生成h值。 系統緩存通過apc_cache_make_file_key函數生成key。通過APC的配置項apc.stat的開關來區別對待不同的方案。在打開的情況下,即 apc.stat= On 時,如果被更新則自動重新編譯和緩存編譯后的內容。此時的h值是文件的device和inode相加所得的值。在關閉的情況下,即apc.stat=off時,當文件被修改后,如果要使更新的內容生效,則必須重啟Web服務器。此時h值是根據文件的路徑地址生成,并且這里的路徑是絕對路徑。即使你是使用的相對路徑,也會查找PG(include_path)定位文件,以取得絕對路徑,所以使用絕對路徑會跳過檢查,可以提高代碼的效率。

常用APC設置

apc.cache_by_default默認啟用緩存。1表示“啟用”,0表示“禁用”
apc.filters根據逗號分隔的POSIX正則表達式判斷文件需要緩存還是不需要緩存。以a+開頭的正則
表達式將強制APC不緩存與此正則表達式匹配的任何文件。以a-開頭的正則表達式將強制
APC緩存與此正則表達式匹配的任何文件
apc.stat 啟用或禁用APC對于所有請求PHP腳本是否有更改的檢查。每次調用腳本時均會執行此
過程。如果禁用該設置,在對PHP腳本進行任意更改后均需要重新啟動WEB服務器以
清除緩存并更改腳本內容。0=禁用,1=啟用,默認1
apc.enabled啟用或禁用APC緩存。0=禁用,1=啟用,默認1
apc.shm_size 設置APC允許使用的共享內存大小,此值以兆字節為單位
apc.shm_segments 設置可用的共享內存段總數
apc.include_once_override啟用或禁用include_once和require_once的優化。啟用該設置時,可減少PHP內部函數進行的額外系統調用。0=禁用,1=啟用,默認0
apc.optimization 設置優化級別。0=禁用優化功能
apc.num_files_hint設置你認為需要緩存的文件數。默認值1000,如果不確定文件數,可以設置0
apc.ttl 設置文件存儲在緩存中的過期時間,以秒為單位。
apc.write_lock 開啟該設置將強制單個進程緩存特定的腳步。適用于必須緩存多個文件的大流量WEB服務器或應用程序

添加緩存過程

以用戶緩存為例,apc_add函數用于給APC緩存中添加內容。如果key參數為字符串中,APC會根據此字符串生成key,如果key參數為數組,APC會遍歷整個數組,生成key。根據這些key,APC會調用_apc_store將值存儲到緩存中。由于這是用戶緩存,當前使用的緩存為apc_user_cache。執行寫入操作的是apc_cache_make_user_entry函數,其最終調用apc_cache_user_insert執行遍歷查詢和寫入操作。與此對應,系統緩存使用apc_cache_insert執行寫入操作,其最終都會調用_apc_cache_insert。

不管是用戶緩存還是系統緩存,大體的執行過程類似,步驟如下:

  • 通過求余操作,定位當前key的在slots數組中的位置: cache->slots[key.h % cache->num_slots];
  • 在定位到slots數組中的位置后,遍歷當前key對應的slot鏈表,如果存在slot的key和要寫入的key匹配或slot過期,清除當前slot。
  • 在最后一個slot的后面插入新的slot。
  • 2、APC模塊安裝

    WINDOWS

    第一步:下載php_apc.dll 在http://pecl.php.net/package/apc 要與php版本對應 將php_apc.dll放入你的ext目錄

    第二步:讓php.ini支持apc擴展模塊。 然后打開php.ini 加入:

    extension=php_apc.dll

    apc.rfc1867 = on

    apc.max_file_size = 100M

    upload_max_filesize = 100M

    post_max_size = 100M

    //以上參數可自己定義

    第三步:檢查是否支持PHP APC apc_store apc_fetch PHP APC 配置參數 把相關的配置放在一起解釋。

    apc.enabled=1 apc.enabled默認值是1,你可設成0禁用APC。如果你設置為0的時候,同樣把extension=apc.so也注釋掉(這樣可以節約內存資源)。一旦啟用了APC功能,則會緩存Opcodes到共享內存。

    apc.shm_segments = 1

    總結 1,使用Spinlocks鎖機制,能夠達到最佳性能。

    2,APC提供了apc.php,用于監控與管理APC緩存。不要忘記修改管理員名和密碼

    3,APC默認通過mmap匿名映射創建共享內存,緩存對象都存放在這塊”大型”的內存空間。由APC自行管理該共享內存

    4,我們需要通過統計調整apc.shm_size、apc.num_files_hints、apc.user_entries_hint的值。直到最佳

    5,好吧,我承認apc.stat = 0 可以獲得更佳的性能。要我做什么都可以接受.

    6,PHP預定義常量,可以使用apc_define_constants()函數。不過據APC開發者介紹說pecl hidef性能更佳,拋異define吧,它是低效的。

    7,函數apc_store(),對于系統設置等PHP變量,生命周期是整個應用(從httpd守護進程直到httpd守護進程關閉),使用APC比Memcached會更好。必竟不要經過網絡傳輸協議tcp。

    8,APC不適于通過函數apc_store()緩存頻繁變更的用戶數據,會出現一些奇異現象。

    LIUNX

    wget http://pecl.php.net/get/APC-3.1.8.tgz

    tar -zxvf APC-3.1.8.tgz cd APC-3.1.8

    /usr/local/php/bin/phpize

    ./configure --enable-apc --enable-mmap --enable-apc-spinlocks --disable-apc-pthreadmutex --with-php-config=/usr/local/php/bin/php-config

    make

    sudo make install

    在/usr/local/php/etc/php.ini 加入

    extension = "apc.so" ;

    ;APC setting

    apc.enabled = 1

    apc.shm_segments = 1

    apc.shm_size = 64M

    apc.optimization = 1

    apc.num_files_hint = 0

    apc.ttl = 0

    apc.gc_ttl = 3600

    apc.cache_by_default = on

    重啟apache 或者 /usr/local/php/sbin/php-fpm restart

    查看phpinfo apc

    轉載于:https://www.cnblogs.com/hf8051/p/5192013.html

    總結

    以上是生活随笔為你收集整理的php可选缓存APC的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。