#[RPC\Cache]

Остання зміна 2024/05/19 21:19 автором Ashterix

Summary

ClassnameCache
NamespaceUfo\RpcObject\RPC
Targetmethod
Arguments:
$lifetimeSecondtypeint
optionaltrue
default60
$environmentstypearray
optionaltrue
default['prod']

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
<?php
namespace App\Api\Procedures;

use Ufo\RpcObject\RPC;

class SomeApiMethod implements IRpcService
{
   #[RPC\Cache]
   public function methodThatWorksForALongTime(): void {}
}

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

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

bin/console cache:clear

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

<?php
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 оточень.

1
2
3
4
5
6
7
8
9
10
<?php
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 {}
}