Вікі-код для #[RPC\Cache]

Версія 3.1 додана 2024/05/10 15:49 автором Ashterix

Показати останніх авторів
1 {{box cssClass="floatinginfobox" width="400px"}}
2 == (% style="display:block; margin-top:-30px; text-align:center" %)Summary(%%) ==
3
4 (% style="margin-right:auto" %)
5 |(% style="width:141px" %)**Classname**|(% colspan="2" rowspan="1" style="width:79px" %)Cache
6 |(% style="width:141px" %)**Namespace**|(% colspan="2" style="width:79px" %)(((
7 Ufo\RpcObject\RPC
8 )))
9 |(% style="width:141px" %)(((
10 **Target**
11 )))|(% colspan="2" rowspan="1" style="width:79px" %)method
12 |(% colspan="3" style="width:141px" %)**Arguments:**
13 |(% colspan="1" rowspan="3" style="width:141px" %)(((
14 **$lifetimeSecond**
15 )))|(% style="width:79px" %)**type**|(% style="width:153px" %)int
16 |(% style="width:79px" %)**optional**|(% style="width:153px" %)true
17 |(% style="width:79px" %)**default**|(% style="width:153px" %)60
18 |(% colspan="1" rowspan="3" style="width:141px" %)(((
19 **$environments**
20 )))|(% style="width:79px" %)**type**|(% style="width:153px" %)array
21 |(% style="width:79px" %)**optional**|(% style="width:153px" %)true
22 |(% style="width:79px" %)**default**|(% style="width:153px" %)['prod']
23 {{/box}}
24
25 = Кешування відповіді методу =
26
27 За замовченням кешування відповідей ваших RPC методів вимкнено і кожен раз, коли ви викликаєте API, метод буде викликано.
28
29 Проте, інколи, для певних методів, результат яких змінюється не часто, є сенс ввімкнути кешування відповіді задля підвищення швидкості обробки запитів, для збереження лімітів, зниження навантаження на частини системи, тощо.
30
31 RPC Server використовує саме ту реалізацію CacheInterface від Symfony, яка використовується в вашому в проєкті. Таким чином, немає потреби в додатковому налаштуванні.
32
33 Ввімкнути кешування максимально просто, єдине що вам потрібно зробити це до певного методу додати атрибут {{code language="none"}}#[RPC\Cache]{{/code}}.
34
35 {{code language="php" layout="LINENUMBERS"}}
36 <?php
37 namespace App\Api\Procedures;
38
39 use Ufo\RpcObject\RPC;
40
41 class SomeApiMethod implements IRpcService
42 {
43 #[RPC\Cache]
44 public function methodThatWorksForALongTime(): void {}
45 }
46 {{/code}}
47
48 Це налаштування дозволить кешувати відповідь впродовж однієї хвилини, кожен наступний запит на цей метод з тими самими параметрами буде отримувати відповідь миттєво з кеша.
49
50 Скинути кеш можна як і завжди, виконавши Symfony команду
51
52 {{code language="bash"}}
53 bin/console cache:clear
54 {{/code}}
55
56 В разі потреби ви можете збільшити час життя кеша, передавши кількість секунд в параметр lifetimeSecond. Для зручності створені константи, які покривають більшість потреб, але ви також можете передати значення простим числом.
57
58 {{code language="php"}}
59 <?php
60 use Ufo\RpcObject\RPC\Cache;
61
62 Cache::T_MINUTE; // 60
63 Cache::T_5_MINUTES; // 300
64 Cache::T_10_MINUTES; // 600
65 Cache::T_30_MINUTES; // 1800
66 Cache::T_HOUR; // 3600
67 Cache::T_2_HOURS; // 7200
68 Cache::T_5_HOURS; // 18000
69 Cache::T_10_HOURS; // 36000
70 Cache::T_DAY; // 86400
71 Cache::T_2_DAYS; // 172800
72 Cache::T_3_DAYS; // 259200
73 Cache::T_5_DAYS; // 432000
74 Cache::T_10_DAYS; // 864000
75 Cache::T_WEEK; // 604800
76 Cache::T_2_WEEKS; // 1209600
77 Cache::T_3_WEEKS; // 1814400
78 Cache::T_MONTH; // 2592000
79 Cache::T_2_MONTHS; // 5184000
80 Cache::T_3_MONTHS; // 7776000
81 Cache::T_HALF_YEAR; // 15724800
82 Cache::T_YEAR; // 31536000
83 {{/code}}
84
85 Також ви можете змінити налаштування оточення на якому кеш може бути ввімкнений. За замовченням кешування працює лише в оточенні {{code language="none"}}prod{{/code}}. Але ви можете це змінити передавши масивом назви оточень, в яких хочете кешувати результати. У прикладі нижче результат буде кешуватися протягом однієї доби для {{code language="none"}}prod{{/code}} і {{code language="none"}}dev{{/code}} оточень.
86
87 {{code language="php" layout="LINENUMBERS"}}
88 <?php
89 namespace App\Api\Procedures;
90
91 use Ufo\RpcObject\RPC;
92
93 class SomeApiMethod implements IRpcService
94 {
95 #[RPC\Cache(lifetimeSecond: RPC\Cache::T_DAY, environments: ['dev', 'prod'])]
96 public function methodThatWorksForALongTime(): void {}
97 }
98 {{/code}}