Зміни в документі #[RPC\Cache]

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

Від версії 1.1
редаговано Ashterix
дата 2024/05/10 10:59
Змінити коментар: Немає коментарів для цієї версії
До версії 3.1
редаговано Ashterix
дата 2024/05/10 15:49
Змінити коментар: Немає коментарів для цієї версії

Підсумок

Подробиці

Властивості сторінки
Вміст
... ... @@ -1,0 +1,98 @@
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}}