Кешування відповіді методу

Summary

Classname

Cache

Namespace

Ufo\RpcObject\RPC

Target

method

Constructor

/**
 * Cache constructor.
 *
 * @param int $lifetimeSecond
 * @param array $environments
 */
public function __construct(
    public int $lifetimeSecond = self::T_MINUTE,
    public array $environments = [self::ENV_PROD],
) {}

Кешування відповіді методу

За замовченням кешування відповідей ваших RPC методів вимкнено і кожен раз, коли ви викликаєте API, метод буде викликано.

Проте, інколи, для певних методів, результат яких змінюється не часто, є сенс ввімкнути кешування відповіді задля підвищення швидкості обробки запитів, для збереження лімітів, зниження навантаження на частини системи, тощо.

RPC Server використовує саме ту реалізацію CacheInterface від Symfony, яка використовується в вашому в проєкті. Таким чином, немає потреби в додатковому налаштуванні.

Ввімкнути кешування максимально просто, єдине що вам потрібно зробити це до певного методу додати атрибут #[RPC\Cache].

namespace App\Api\Procedures;  
  
use Ufo\RpcObject\RPC;  
  
class SomeApiMethod implements IRpcService  
{  
    #[RPC\Cache]  
    public function methodThatWorksForALongTime(): void {}  
}

Це налаштування дозволить кешувати відповідь впродовж однієї хвилини, кожен наступний запит на цей метод з тими самими параметрами буде отримувати відповідь миттєво з кеша.

Скинути кеш можна як і завжди, виконавши Symfony команду

bin/console cache:clear

В разі потреби ви можете збільшити час життя кеша, передавши кількість секунд в параметр lifetimeSecond. Для зручності створені константи, які покривають більшість потреб, але ви також можете передати значення простим числом.

use Ufo\RpcObject\RPC\Cache;  
  
Cache::T_MINUTE; // 60  
Cache::T_5_MINUTES; // 300  
Cache::T_10_MINUTES; // 600  
Cache::T_30_MINUTES; // 1800  
Cache::T_HOUR; // 3600  
Cache::T_2_HOURS; // 7200  
Cache::T_5_HOURS; // 18000  
Cache::T_10_HOURS; // 36000  
Cache::T_DAY; // 86400  
Cache::T_2_DAYS; // 172800  
Cache::T_3_DAYS; // 259200  
Cache::T_5_DAYS; // 432000  
Cache::T_10_DAYS; // 864000  
Cache::T_WEEK; // 604800  
Cache::T_2_WEEKS; // 1209600  
Cache::T_3_WEEKS; // 1814400  
Cache::T_MONTH; // 2592000  
Cache::T_2_MONTHS; // 5184000  
Cache::T_3_MONTHS; // 7776000  
Cache::T_HALF_YEAR; // 15724800  
Cache::T_YEAR; // 31536000

Також ви можете змінити налаштування оточення на якому кеш може бути ввімкнений. За замовченням кешування працює лише в оточенні prod. Але ви можете це змінити передавши масивом назви оточень, в яких хочете кешувати результати. У прикладі нижче результат буде кешуватися протягом однієї доби для prod і dev оточень.

namespace App\Api\Procedures;  
  
use Ufo\RpcObject\RPC;  
  
class SomeApiMethod implements IRpcService  
{  
    #[RPC\Cache(lifetimeSecond: RPC\Cache::T_DAY, environments: ['dev', 'prod'])]  
    public function methodThatWorksForALongTime(): void {}  
}