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

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

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