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

Версія 2.2 додана 2024/05/10 12:44 автором Ashterix

Сховати останніх авторів
Ashterix 2.1 1 {{box cssClass="floatinginfobox" width="400px"}}
2 == (% style="display:block; margin-top:-30px; text-align:center" %)Summary(%%) ==
3
4 (% style="margin-right:auto" %)
Ashterix 2.2 5 |(% style="width:141px" %)**Classname**|(% colspan="2" rowspan="1" style="width:79px" %)Cache
Ashterix 2.1 6 |(% style="width:141px" %)**Namespace**|(% colspan="2" style="width:79px" %)(((
7 Ufo\RpcObject\RPC
8 )))
9 |(% style="width:141px" %)(((
10 **Target**
Ashterix 2.2 11 )))|(% colspan="2" rowspan="1" style="width:79px" %)method
Ashterix 2.1 12 |(% colspan="3" style="width:141px" %)**Arguments:**
13 |(% colspan="1" rowspan="3" style="width:141px" %)(((
Ashterix 2.2 14 **$lifetimeSecond**
15 )))|(% style="width:79px" %)**type**|(% style="width:153px" %)int
Ashterix 2.1 16 |(% style="width:79px" %)**optional**|(% style="width:153px" %)true
Ashterix 2.2 17 |(% style="width:79px" %)**default**|(% style="width:153px" %)60
Ashterix 2.1 18 |(% colspan="1" rowspan="3" style="width:141px" %)(((
Ashterix 2.2 19 **$environments**
20 )))|(% style="width:79px" %)**type**|(% style="width:153px" %)array
Ashterix 2.1 21 |(% style="width:79px" %)**optional**|(% style="width:153px" %)true
Ashterix 2.2 22 |(% style="width:79px" %)**default**|(% style="width:153px" %)['prod']
Ashterix 2.1 23 {{/box}}
24
Ashterix 2.2 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 Cache::T_MINUTE; // 60
61 Cache::T_5_MINUTES; // 300
62 Cache::T_10_MINUTES; // 600
63 Cache::T_30_MINUTES; // 1800
64 Cache::T_HOUR; // 3600
65 Cache::T_2_HOURS; // 7200
66 Cache::T_5_HOURS; // 18000
67 Cache::T_10_HOURS; // 36000
68 Cache::T_DAY; // 86400
69 Cache::T_2_DAYS; // 172800
70 Cache::T_3_DAYS; // 259200
71 Cache::T_5_DAYS; // 432000
72 Cache::T_10_DAYS; // 864000
73 Cache::T_WEEK; // 604800
74 Cache::T_2_WEEKS; // 1209600
75 Cache::T_3_WEEKS; // 1814400
76 Cache::T_MONTH; // 2592000
77 Cache::T_2_MONTHS; // 5184000
78 Cache::T_3_MONTHS; // 7776000
79 Cache::T_HALF_YEAR; // 15724800
80 Cache::T_YEAR; // 31536000
81
82 {{/code}}
83
84 Також ви можете змінити налаштування оточення на якому кеш може бути ввімкнений. За замовченням кешування працює лише в оточенні {{code language="none"}}prod{{/code}}. Але ви можете це змінити передавши масивом назви оточень, в яких хочете кешувати результати. У прикладі нижче результат буде кешуватися протягом однієї доби для {{code language="none"}}prod{{/code}} і {{code language="none"}}dev{{/code}} оточень.
85
86 {{code language="php" layout="LINENUMBERS"}}
87 <?php
88 namespace App\Api\Procedures;
89
90 use Ufo\RpcObject\RPC;
91
92 class SomeApiMethod implements IRpcService
93 {
94 #[RPC\Cache(lifetimeSecond: RPC\Cache::T_DAY, environments: ['dev', 'prod'])]
95 public function methodThatWorksForALongTime(): void {}
96 }
97 {{/code}}