PHP APC Cache configuration, use detailed _php example

Source: Internet
Author: User
Tags apc apc configuration apc module garbage collection key string phpinfo posix

introduction of APC Cache
APC, the full name is alternative PHP cache, official translation is called "Optional PHP caching." It provides us with a framework for caching and optimizing PHP's intermediate code. The APC cache is divided into two parts: the system cache and the user data cache.
System Cache
It means that the APC caches the compiled results of the PHP file source code, and then compares the time tag with each call. If it is not expired, it is run using the cached intermediate code. Default cache
3600s (one hour). But it still wastes a lot of CPU time. Therefore, you can set the system cache to never expire (apc.ttl=0) in php.ini. However, if you do this, you need to restart the Web server after you change the PHP code. This type of caching is currently used more often.
User Data caching
Caching is read and written by the user when writing PHP code using the Apc_store and Apc_fetch function operations. If the amount of data is small, you can try. If the volume of data is large, it is better to use a more monographs memory caching scheme similar to Memcache
Cache key Generation Rule
Each slot in the APC cache will have a key,key that is
apc_cache_key_t structure type, in addition to key-related properties, the key is the generation of H field. The H field determines which position this element falls in the slots array. The generation rules for user caching and system caching are different. User caching generates key through the Apc_cache_make_user_key function. The key string passed in by the user relies on the hash function in the PHP kernel (the hash function used by the PHP Hashtable: zend_inline_hash_func) to generate H values.
The system cache generates key through the Apc_cache_make_file_key function. Different scenarios are differentiated by the apc.stat switches of the APC configuration item. In the case of open, that
Apc.stat= on, the compiled content is automatically recompiled and cached if it is updated. The H value at this time is the value of the device of the file and the addition of the inode. In the case of shutdown, that is, when the file is modified, the Web server must be restarted if you want the updated content to take effect Apc.stat=off. At this point the H value is generated from the path address of the file, and the path here is an absolute path. Even if you are using a relative path, you will find the PG (include_path) location file to get an absolute path, so skipping the check using an absolute path can improve the efficiency of your code.
Adding caching procedures
In user caching, for example, the Apc_add function is used to add content to the APC cache. If the key argument is a string, the APC generates a key based on this string, and if the key argument is an array, the APC traverses the entire array and generates the key. According to these KEY,APC, the _apc_store is called to store the value in the cache. Because this is a user cache, the cache currently in use is Apc_user_cache. The write operation is performed by the Apc_cache_make_user_entry function, which ultimately calls Apc_cache_user_insert to perform traversal queries and write operations. In this correspondence, the system cache performs a write operation using Apc_cache_insert, which eventually invokes _apc_cache_insert.
Whether it's a user cache or a system cache, the general execution process is similar, and the steps are as follows:

Locates the position of the current key in the slots array by means of a remainder operation: cache->slots[key.h% cache->num_slots];
After locating the position in the slots array, traverse the slot list of the current key, and clear the current slot if there is a slot key and a key match to write or slot expires.
Insert the new slot after the last slot.
Second, the APC module installation

Install APC under
The first step: Download Php_apc.dll in HTTP://PECL.PHP.NET/PACKAGE/APC to correspond with the PHP version will php_apc.dll into your ext directory
Step two: Let php.ini support the APC extension module. Then open php.ini and join:

Copy Code code as follows:
apc.rfc1867 = On
Apc.max_file_size = 100M
Upload_max_filesize = 100M
Post_max_size = 100M
The above parameters can be defined by themselves

Step three: Check to see if you support PHP APC apc_store apc_fetch
See if there are APC dependencies in the Phpinfo

Install APC under B.liunx
First step: Download and install
TAR-ZXVF apc-3.1.8.tgz CD APC-3.1.8
./configure--ENABLE-APC--enable-mmap--enable-apc-spinlocks--disable-apc-pthreadmutex--with-php-config=/usr/ Local/php/bin/php-config
sudo make install
Step Two: Configure APC
Add the following configuration items to/usr/local/php/etc/php.ini:

Copy Code code as follows:

Extension = "";
; 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

Step three: Check if the installation was successful
Restart Apache or/usr/local/php/sbin/php-fpm restart
See if there are APC dependencies in the Phpinfo
detailed understanding of configuration parameters and summary of usage
1). The parameter configuration of APC module is detailed

Copy Code code as follows:

apc.enabled Boolean type
Apc.enabled can be set to 0来 disable APC. This is primarily useful when the APC is statically compiled into PHP because there is no other way to disable it (when compiling to DSO, you can comment out the extension line in the php.ini).

Apc.shm_segments Integral type
The number of shared memory blocks allocated to the compilation cache. If the APC runs out of shared memory, and you have set the apc.shm_size to the maximum allowed by the system, you can try to increase the value of this parameter.

Apc.shm_size Integral type
The size of each shared memory block is in megabytes. By default, some systems (including most BSD variant systems) have a low size limit for shared memory blocks.

Apc.optimization Integral type
Optimization level. Set to 0 disables optimization, and the higher the value, the stronger the optimization. Look forward to a modest improvement in speed. This is still experimental in nature.

Apc.num_files_hint Integral type
Tips on the number of different source files that are included and requested on your Web server. If you are unsure, set to 0 or omit; This setting may be used primarily for sites with thousands of source files.

Apc.ttl Integral type
When a cache entry is required by another entry in the buffer location, we need to consider the number of seconds that the cache entry is allowed to be idle in the buffer location. Setting this parameter to 0 means that your cache may be full of stale entries and that new entries cannot be cached.

Apc.gc_ttl Integral type
The number of seconds the cached entry survives in the garbage collection list. This value provides an error protection in the event that a cache source file is executed while the server process is dead. If the source file is modified, the memory allocated to the old version of the cache entry will not be recycled until the TTL value is set to this parameter. Setting to 0 prohibits this feature.

Apc.cache_by_default Boolean type
The default is on, but it can be set to off and used in conjunction with a apc.filters that starts with a plus sign, and the file is cached only when the filter is matched.

Apc.filters string
A comma-separated list of POSIX-extended regular expressions. If any pattern matches the source filename, the file will not be cached. Note the filename used to match is the file name passed to Include/require, not the absolute path. If the first character of the regular expression is +, the expression means that any file that matches the expression will be cached, and if the first character is-then no match will be cached. -Is the default value, so it can be omitted.

Apc.mmap_file_mask string (This paragraph is not quite understood, so there is no translation)
If compiled with MMAP support by using--enable-mmap this are the Mktemp-style File_mask to pass to the MMAP module for DET Erming whether your mmap ' Ed memory region is going to be file-backed or shared memory. For straight file-backed Mmap, set it to something LIKE/TMP/APC. XXXXXX (exactly 6 Xs). To use Posix-style Shm_open/mmap put a. Shm somewhere in your mask. e.g./APC.SHM.XXXXXX can also set it To/dev/zero to use your kernel ' S/dev/zero interface to Anonymous ' Ed Mmap. Leaving it undefined would force an anonymous mmap.

Apc.slam_defense Integral type
On very busy servers, whether you start a service or modify a file, you can cause a multiple process to try to cache the same file at the same time. This option sets the percentage of the process skipping attempts to cache a file that is not cached. Or you can think of this as a chance for a separate process to skip caching. For example, setting Apc.slam_defense to 75 means that the process has a 75% chance of not caching files that are not cached. Therefore, the higher the setting, the more it can reduce the collision probability of the cache. This attribute is disabled when set to 0.

Apc.file_update_protection Integral type
When you modify a file on a running server, you should perform an atomic operation. That is, write a temporary file first, and then rename (MV) the file to its final position when it is finished. Many text editors, Cp,tar, and other similar programs do not operate this way. This means that there is a chance to access and (cache) the file when the file is still being written. The Apc.file_update_protection setting causes the cache to mark the delay of the new file. The default value is 2, which means that if the file is found to be modified for less than 2 seconds, the file will not be cached. Unfortunate users who visit half of the files will see bizarre situations, but at least this is not sustainable. If you are sure that you often use atomic operations to update your files, you can turn off this protection by setting this parameter to 0. If your system is full of IO operations and causes the update to take more than 2 seconds, you may need to increase the value.

Apc.enable-cli Integral type
Most are for testing and debugging. Start the APC feature for CLI version of PHP. In general, you will not think of creating, porting, and discarding the APC cache for each CLI request, but for a variety of test scenarios it is easy to turn on the APC for the CLI version.

2). Summary of Use
1, the use of spinlocks lock mechanism, to achieve the best performance.
The 2,APC provides apc.php for monitoring and managing the APC cache. Don't forget to change the administrator name and password
3,APC By default creates shared memory by Mmap Anonymous mappings, which are stored in this "large" memory space. This shared memory is managed by the APC itself
4, we need to adjust the values of apc.shm_size, Apc.num_files_hints, apc.user_entries_hint by statistics. Until the best
5, OK, I admit Apc.stat = 0 can achieve better performance. Anything I can do is acceptable.
6,php predefined constants, you can use the apc_define_constants () function. However, according to the APC developers said PECL HiDef performance better, throw a different define it, it is inefficient.
7, Function Apc_store (), for the system settings such as PHP variables, the lifecycle is the entire application (from the httpd daemon until the httpd daemon shutdown), the use of APC than memcached will be better. Must not go through the Network Transport Protocol TCP.
8,APC is not suitable for user data that is frequently changed through function Apc_store () caching, there are some strange phenomena.

Iv. Examples of Use
The following refers to the APC cache class for the initphp framework

Copy Code code as follows:

Class apc{

* APC Cache-Set cache
* Set cache Key,value and cache time
* @param string $key key value
* @param string $value value
* @param string $time cache time
Public Function Set_cache ($key, $value, $time = 0) {
if ($time = = 0) $time = null; Permanent cache in case of NULL
Return Apc_store ($key, $value, $time)

* APC Cache-Get Cache
* Get cached data through key
* @param string $key key value
Public Function Get_cache ($key) {
Return Apc_fetch ($key);

* APC Cache-Clears a cache
* Remove a cache from the Memcache
* @param string $key key value
Public function Clear ($key) {
Return Apc_delete ($key);

* APC Cache-Clears all caches
* It is not recommended to use this feature
* @return
Public Function Clear_all () {
Apc_clear_cache (' user '); Clear User Cache
return Apc_clear_cache (); Clear Cache

* Check for APC cache presence
* @param string $key key value
Public function exists ($key) {
Return apc_exists ($key);

* Field self-used for counting
* @param string $key key value
* @param int $step The new step value
Public Function Inc ($key, $step) {
Return Apc_inc ($key, (int) $step);

* Field self-minus-for counting
* @param string $key key value
* @param int $step The new step value
Public function Dec ($key, $step) {
Return Apc_dec ($key, (int) $step);

* Return APC Cache information
Public Function info () {
return Apc_cache_info ();

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.