Current Location: Home> Latest Articles> Use apcu_entry to cache response data in RESTful API

Use apcu_entry to cache response data in RESTful API

gitbox 2025-05-14

When building high-performance RESTful APIs, response speed and system load are always the core issues that developers are concerned about. In order to solve the performance bottleneck caused by frequent reading of the same data, PHP provides a variety of caching mechanisms, among which the apcu_entry function is an efficient tool for using APCu user cache. This article will explain how to use the apcu_entry function to cache response data in the RESTful API to significantly improve interface performance.

1. What is apcu_entry ?

apcu_entry is a convenient function provided by the PHP APCu extension. Its function is: when there is a specified key in the cache, it directly returns the corresponding value; when the key does not exist in the cache, the provided callback function is called to generate data and save the data to the cache.

The function signature is as follows:

 mixed apcu_entry(string $key, callable $callback, int $ttl = 0)
  • $key : cache key name.

  • $callback : A function executed when the cache does not exist, used to generate data.

  • $ttl : Optional, cached expiration time (seconds), defaults to never expire.

2. Application scenario: Cache RESTful API response data

Suppose we have a RESTful API that returns product information, and each request is read from the database, which can easily cause increased pressure. By using apcu_entry to cache these response data, the number of database queries can be effectively reduced.

Here is a sample code:

 <?php

header('Content-Type: application/json');

// Simulate to obtain product information from the database
function getProductFromDatabase($productId) {
    // Assume this is a database query operation
    return [
        'id' => $productId,
        'name' => 'Sample Products',
        'price' => 99.99,
        'url' => 'https://gitbox.net/product/' . $productId
    ];
}

// Get Products ID
$productId = isset($_GET['id']) ? intval($_GET['id']) : 1;

// Construct cache key name
$cacheKey = 'product_' . $productId;

// use apcu_entry Cache data
$product = apcu_entry($cacheKey, function() use ($productId) {
    return getProductFromDatabase($productId);
}, 300); // cache 5 minute

echo json_encode([
    'status' => 'success',
    'data' => $product
]);

3. How to enable APCu

To use apcu_entry , you need to make sure the server is installed and enabled for the APCu extension:

  1. Install the extension (taking the Debian system as an example):

 sudo apt install php-apcu
  1. Edit the php.ini file and add:

 extension=apcu.so
apc.enable_cli=1
  1. Restart PHP service:

 sudo systemctl restart php8.1-fpm

4. Things to note

  • APCu is only suitable for stand-alone environments and is not suitable for multi-node cluster deployment. If your API is running on multiple servers, it is recommended to use distributed caches such as Redis or Memcached.

  • The cache of apcu_entry is memory-level, and restarting PHP or server will clear all cached data.

  • When using cache, make sure the cache failure time (TTL) is reasonable to avoid data obsolete due to long-term cache.

5. Summary

Through the apcu_entry function, PHP developers can add efficient local caching mechanisms to the RESTful API without introducing additional libraries. This not only improves interface response speed, but also significantly reduces system load, which is especially suitable for reading frequently but not very variable data. For small and medium-sized systems or stand-alone API applications, apcu_entry is a lightweight, simple and practical performance optimization solution.