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

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

Ashterix

init

uk/docs/api/json-rpc-bundle/add_rpc_service/cache.md новий файл +130 −0

1 + ## Summary
2 +
3 +
4 + <block class='floatinginfobox'>
5 +
6 + <columns border="1" zebra="1">
7 + <col width="40%">
8 +
9 + **Classname**
10 + </col>
11 + <col>
12 + `Cache`
13 + </col>
14 + </row>
15 + <col width="40%">
16 +
17 + **Namespace**
18 + </col>
19 + <col>
20 +
21 + `Ufo\RpcObject\RPC`
22 + </col>
23 + </row>
24 + <col width="40%">
25 +
26 + **Target**
27 + </col>
28 + <col>
29 +
30 + `method`
31 + </col>
32 + </columns>
33 +
34 + <columns border="1" zebra="1">
35 + <col align="center">
36 + Constructor
37 + </col>
38 + </row>
39 + <col>
40 +
41 + ```php
42 + /**
43 + * Cache constructor.
44 + *
45 + * @param int $lifetimeSecond
46 + * @param array $environments
47 + */
48 + public function __construct(
49 + public int $lifetimeSecond = self::T_MINUTE,
50 + public array $environments = [self::ENV_PROD],
51 + ) {}
52 + ```
53 +
54 + </col>
55 + </columns>
56 +
57 + </block>
58 +
59 + # Кешування відповіді методу
60 +
61 + За замовченням кешування відповідей ваших RPC методів вимкнено і кожен раз, коли ви викликаєте API, метод буде викликано.
62 +
63 + Проте, інколи, для певних методів, результат яких змінюється не часто, є сенс ввімкнути кешування відповіді задля підвищення швидкості обробки запитів, для збереження лімітів, зниження навантаження на частини системи, тощо.
64 +
65 + RPC Server використовує саме ту реалізацію CacheInterface від Symfony, яка використовується в вашому в проєкті. Таким чином, немає потреби в додатковому налаштуванні.
66 +
67 + Ввімкнути кешування максимально просто, єдине що вам потрібно зробити це до певного методу додати атрибут `#[RPC\Cache]`.
68 +
69 +
70 + ```php
71 + namespace App\Api\Procedures;
72 +
73 + use Ufo\RpcObject\RPC;
74 +
75 + class SomeApiMethod implements IRpcService
76 + {
77 + #[RPC\Cache]
78 + public function methodThatWorksForALongTime(): void {}
79 + }
80 + ```
81 +
82 + Це налаштування дозволить кешувати відповідь впродовж однієї хвилини, кожен наступний запит на цей метод з тими самими параметрами буде отримувати відповідь миттєво з кеша.
83 +
84 + Скинути кеш можна як і завжди, виконавши Symfony команду
85 +
86 + ```bash
87 + bin/console cache:clear
88 + ```
89 +
90 + В разі потреби ви можете збільшити час життя кеша, передавши кількість секунд в параметр lifetimeSecond. Для зручності створені константи, які покривають більшість потреб, але ви також можете передати значення простим числом.
91 +
92 + ```php
93 + use Ufo\RpcObject\RPC\Cache;
94 +
95 + Cache::T_MINUTE; // 60
96 + Cache::T_5_MINUTES; // 300
97 + Cache::T_10_MINUTES; // 600
98 + Cache::T_30_MINUTES; // 1800
99 + Cache::T_HOUR; // 3600
100 + Cache::T_2_HOURS; // 7200
101 + Cache::T_5_HOURS; // 18000
102 + Cache::T_10_HOURS; // 36000
103 + Cache::T_DAY; // 86400
104 + Cache::T_2_DAYS; // 172800
105 + Cache::T_3_DAYS; // 259200
106 + Cache::T_5_DAYS; // 432000
107 + Cache::T_10_DAYS; // 864000
108 + Cache::T_WEEK; // 604800
109 + Cache::T_2_WEEKS; // 1209600
110 + Cache::T_3_WEEKS; // 1814400
111 + Cache::T_MONTH; // 2592000
112 + Cache::T_2_MONTHS; // 5184000
113 + Cache::T_3_MONTHS; // 7776000
114 + Cache::T_HALF_YEAR; // 15724800
115 + Cache::T_YEAR; // 31536000
116 + ```
117 +
118 + Також ви можете змінити налаштування оточення на якому кеш може бути ввімкнений. За замовченням кешування працює лише в оточенні prod. Але ви можете це змінити передавши масивом назви оточень, в яких хочете кешувати результати. У прикладі нижче результат буде кешуватися протягом однієї доби для prod і dev оточень.
119 +
120 + ```php
121 + namespace App\Api\Procedures;
122 +
123 + use Ufo\RpcObject\RPC;
124 +
125 + class SomeApiMethod implements IRpcService
126 + {
127 + #[RPC\Cache(lifetimeSecond: RPC\Cache::T_DAY, environments: ['dev', 'prod'])]
128 + public function methodThatWorksForALongTime(): void {}
129 + }
130 + ```