<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                APCU的前身是APC,APC的主要用途有兩項: 1. 將PHP代碼編譯之后所產生的bytecode暫存在共享內存內供重復使用,以提升應用的運行效率。(Opcode Cache) 2. 提供用戶數據緩存功能。(User Data Cache) 其中第一點是其主要功能,因為PHP的運行機制——每次接受一個請求時都要初始化所有的資源(將源代碼轉換成Opcode(即001011機器操作嗎),……),執行代碼,然后釋放資源;所以啟用Opcache Cache后,在第一次請求時將編譯后的機器操作碼暫存在共享內存內供重復使用,這樣就可以在初始化資源階段減少CPU和內存的消耗。 但是PHP從PHP 5.5開始,使用ZendOptimizerPlus(更名為Opcache)作為內置的Opcode Cache實現。所以現在APCU的主要功能便不再有意義了,而且其官方也隨后表示不再維護APC了。 雖然apc可以通過關閉Opcache Cache而只使用用戶數據緩存功能但是APC的User Data Cache使用的存儲機制是和Opcode Cache一樣的, 這樣的場景要求數據嚴格正確, 所以鎖會比較多,因此APCU作為緩存用戶數據的擴展被啟用。 他的作用和redis和memcached重合,測試表明, APC的User Data Cache的效率和本地memcached幾乎相當(在單機性能上,APCu通常比Memcached更高。memcached本身的設計就是為了分布式應用,大規模內存緩存,集群,易擴展等,如果只有一臺服務器且內存足夠緩存用戶數據時推薦apcu) APCU緩存和memcahce/redis不一樣的地方。你通過memcache/redis存儲一個數據,在緩存有效期內,同一機器上的不同的PHP進程(FPM+CLI)都是能夠取到這份數據的。 對的,注意關鍵字 “同一機器上的不同的PHP進程”,對于APCU而言,PHP-FPM(PHP5.3.3+)模式下所有的php-fpm進程(即使是不同的pool)屬于同一個父進程,所以是可以共享緩存數據的;但是cli(命令行)模式每次都是單獨一個全新進程,因而和php-fpm模式的進程是不能共享緩存數據的。所以如果你的業務場景需要在cli和php-fpm兩種模式下共享數據一定要小心了,可能memcache或者redis才是你更好的選擇 **APCu 配置選項** | 名字 | 默認 | 可修改范圍 | 說明| | --- | --- | --- | --- | | apc.enabled | "1" | PHP\_INI\_SYSTEM | 啟用緩存擴展? | | apc.shm_segments | "1" | PHP\_INI\_SYSTEM | 分配**共享內存塊**的數量(建議值為1)? | | apc.shm_size | "32M" | PHP\_INI\_SYSTEM | ?設置每個**共享內存塊**的大小(以MB為單位,建議值為128~256) | | apc.entries_hint | "4096" | PHP\_INI\_SYSTEM | ?關于可能存儲的不同變量的數量“提示”。如果不確定,設置為零或省略 | | apc.ttl | "0" | PHP\_INI\_SYSTEM | ?設置緩存超時時間,單位是秒。0表示永不超時。建議值為7200~36000。 | | apc.gc_ttl | "3600" | PHP_INI_SYSTEM | ?緩存條目在垃圾回收表中能夠存在的秒數,此值提供了一個安全措施,即使一個服務器進程在執行緩存的源文件時崩潰,而且該源文件已經被修改,為舊版本分配的內存也不會被回收,直到達到此ttl值為止,設置為0禁用此功能 | | apc.mmap_file_mask | NULL | PHP_INI_SYSTEM | 如果在安裝模塊時使用–enable-mmap(默認啟用)為apc編譯了mmap(映射)支持,<br>這里的值就是傳遞給mmap模塊的mktemp風格的文件掩碼(建議值為"/tmp/apc.xxxxxx"),以確定內存映射區域是文件支持的還是共享內存支持的。<br>對于直接文件支持的內存映射,將它設置為/tmp/apc。XXXXXX(正好6x)。<br>要使用posix風格的shm_open/mmap就需要設置成"/apc.shm.xxxxxx"的樣子。例如/ apc.shm。<br>您還可以將它設置為/dev/zero,以使用內核的/dev/zero接口來訪問匿名映射的內存。<br>不定義它將強制生成一個匿名的mmap(映射)。<br>它將只使用一個內存段,這與使用多個內存段的SHM (SysV共享內存)支持構建APCu不同。MMAP不像/proc/sys/kernel/ shmmaxde那樣有最大限制。一般來說,MMAP支持是被推薦的,因為它將在重新啟動web服務器時更快地回收內存,并且總而言之,在啟動時減少了內存分配的影響。 | | apc.slam_defense | "1" | PHP_INI_SYSTEM | ?在非常繁忙的服務器上,無論是啟動服務還是修改文件,都可能由于多個進程企圖同時緩存一個文件而導致競爭條件。這個指令用于設置進程在處理未被緩存的文件時跳過緩存步驟的百分率。比如設為75表示在遇到未被緩存的文件時有75%的概率不進行緩存,從而減少碰撞幾率。設為 0 禁用這個特性。 | | apc.enable_cli | "0" | PHP_INI_SYSTEM | 主要用于測試和調試,通過設置此選項,可以為cli版本的php啟用apc功能。在正常情況下,在每個CLI請求上創建、填充和銷毀APC緩存并不理想,但是對于各種測試場景,能夠輕松地為CLI版本的PHP啟用APC是很有用的? | | apc.use_request_time | "1" | PHP_INI_ALL | 為生存時間TTL使用SAPI請求啟動時間? | | apc.serializer | "default" | PHP_INI_SYSTEM | ?用于配置APC以使用第三方序列化程序 | | apc.coredump_unmap | "0" | PHP_INI_SYSTEM | ?啟用APC的信號句柄,例如SIGSEGV信號,當信號寫入核心文件。當這些信號被接收,APC將試圖取消映射的共享內存段,從核心文件中排除它。此設置可以提高系統的穩定性,當接受到致命的信號或者采用APC的大型共享內存段配置方式<br>此功能是潛在的危險。如果發生致命錯誤取消映射一個共享內存段致命的信號句柄,?可能會導致不可預知的結果 <br>雖然有些內核可能會提供了便利,忽略各類共享內存時生成核心轉儲文件,這些實現可能也忽略了重要的共享內存段,比如?Apache?scoreboard| | apc.preload_path | NULL | PHP_INI_SYSTEM | 可選地,設置APC將在啟動時加載緩存數據的目錄的路徑? | 如果APCu在工作,那么緩存的全計數號(在左邊)將顯示緩存達到最大容量的次數,并且必須強制清除上一個apc中沒有訪問的任何條目 ``` //修改php.ini加入如下內容[請根據環境自行調整]: extension= "apcu.so" ; ;開啟功能 apc.enabled= 1 ;為編譯器緩沖區分配的共享內存塊數量(建議值為1)。 apc.shm_segments= 1 ;每個共享內存塊的大小(以MB為單位,建議值為128~256)。 apc.shm_size= 128M ;優化級別(建議值為0 );正整數值表示啟用優化器,值越高則使用越激進的優化。 apc.optimization= 0 ;Web服務器上可能被包含或被請求的不同源文件的大致數量(建議值為1024~4096)。如果不能確定,則設為0。 apc.num_files_hint= 0 ;緩沖區中超時時間,單位是秒。0表示永不超時。建議值為7200~36000。 apc.ttl= 0 ;緩存條目在垃圾回收表中超時秒數。 apc.gc_ttl= 3600 //配置變更后,需重啟httpd或者php-fpm服務。 ``` ## **函數:** **增** `apcu_add( string $key , mixed $var [, int $ttl = 0 ] ) bool?-在數據存儲中緩存一個新變量,變量以存在則不會被設置` ``` $bar = 'BAR'; apcu_add('foo', $bar); var_dump(apcu_fetch('foo')); //BAR $bar = 'NEVER GETS SET'; apcu_add('foo', $bar,0); var_dump(apcu_fetch('foo'));//BAR ``` `apcu_add( array $values [, mixed $unused = NULL [, int $ttl = 0 ]] ) : array?-在數據存儲中緩存多個新變量,變量以存在則不會被設置` ``` apcu_add(['foo'=>'BAR','tool'=>'BBT']); apcu_add(['foo'=>'BAR','tool'=>'BBT'],null,0); ``` `apcu_store?-在數據存儲中緩存一個變量 用法同apcu_add,區別就是他會覆蓋存在的緩存變量` ***** **查** `apcu_fetch( mixed $key [, bool &$success ] ) : mixed - 從緩存中獲取已存儲的變量` ``` $bar?=?'BAR'; apcu_store('foo',?$bar); var_dump(apcu_fetch('foo'));//BAR ``` ***** **改** `apcu_cas( string $key , int $old , int $new ) : bool - 用新值更新舊值` ``` apcu_store('foobar',?2); apcu_cas('foobar',?2,?1) ``` `apcu_dec( string $key [, int $step = 1 [, bool &$success [, int $ttl = 0 ]]] )?-減少存儲的值(遞減,必須數值型)` ``` apcu_store('anumber',?42); echo?apcu_dec('anumber'),?PHP_EOL; echo?apcu_dec('anumber',?10),?PHP_EOL; echo?apcu_dec('anumber',?10,?$success),?PHP_EOL; ``` `apcu_inc增加存儲的值(遞增,必須數值型)` ``` apcu_store('anumber',?42); echo?apcu_inc('anumber'),?PHP_EOL; echo?apcu_inc('anumber',?10),?PHP_EOL; echo?apcu_inc('anumber',?10,?$success),?PHP_EOL; ``` ***** **刪** `apcu_delete( mixed $key ) : mixed?-刪除存儲變量從緩存` ``` $bar = 'BAR'; apcu_store('foo', $bar); apcu_delete('foo'); //刪除多個 apcu_delete(['foo', 'bar', 'baz']); ``` `apcu_clear_cache()?-清除APCu緩存 成功返回true` `apcu_enabled() — APCu在當前環境中是否可用 返回bool` `apcu_exists( mixed $keys ) : mixed?-檢查某個變量是否被緩存` ``` $fruit = 'apple'; apcu_store('foo', $fruit); if (apcu_exists('foo')) { echo "Foo exists: "; echo apcu_fetch('foo'); } else { echo "Foo does not exist"; } ``` `apcu_entry( string $key , callable $generator [, int $ttl = 0 ] ) : mixed?-自動讀取或生成一個緩存條目` ``` $config = apcu_entry("config", function($key) { return [ "fruit" => apcu_entry("config.fruit", function($key){ return [ "apples", "pears" ]; }), "people" => apcu_entry("config.people", function($key){ return [ "bob", "joe", "niki" ]; }) ]; }); var_dump($config); //以上例程會輸出: array(2) { ["fruit"]=> array(2) { [0]=> string(6) "apples" [1]=> string(5) "pears" } ["people"]=> array(3) { [0]=> string(3) "bob" [1]=> string(3) "joe" [2]=> string(4) "niki" } } ``` `apcu_sma_info([ bool $limited = FALSE ] ) : array?-檢索APCu共享內存分配信息` ``` print_r(apcu_sma_info()); //以上例程的輸出類似于: Array ( [num_seg] => 1 [seg_size] => 31457280 [avail_mem] => 31448408 [block_lists] => Array ( [0] => Array ( [0] => Array ( [size] => 31448408 [offset] => 8864 ) ) ) ) ``` `apcu_cache_info([ bool $limited = FALSE ] )?-從APC的數據存儲中檢索緩存的信息和元數據 ?` 如果limited為真,則返回值將排除緩存項的單個列表。這在嘗試優化統計信息收集調用時非常有用 ``` print_r(apcu_cache_info()); 結果: Array ( [num_slots] => 2000 [ttl] => 0 [num_hits] => 9 [num_misses] => 3 [start_time] => 1123958803 [cache_list] => Array ( [0] => Array ( [filename] => /path/to/apcu_test.php [device] => 29954 [inode] => 1130511 [type] => file [num_hits] => 1 [mtime] => 1123960686 [creation_time] => 1123960696 [deletion_time] => 0 [access_time] => 1123962864 [ref_count] => 1 [mem_size] => 677 ) [1] => Array (...iterates for each cached file) ) ``` 注意:php-cli模式運行不能保存到下次運行(即命令行執行時,緩存無效) 在FastCGI模式下重啟后將會清除緩存 ## **APCUIterator類** ``` APCUIterator implements Iterator { public __construct ([ mixed $search = NULL [, int $format = APC_ITER_ALL [, int $chunk_size = 100 [, int $list = APC_LIST_ACTIVE ]]]] ) public current ( void ) : mixed - 得到當前項 public getTotalCount ( void ) : int - 得到總數 public getTotalHits ( void ) : int - 獲取緩存總命中數 public getTotalSize ( void ) : int - 獲取總緩存大小 public key ( void ) : string - 得到迭代器關鍵字 public next ( void ) : bool - 移動指針到下一項 public rewind ( void ) : void - 復原指針到初始位置 public valid ( void ) : bool - 檢查當前位置是否有效 } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看