Зміни в документі #[RPC\Cache]
Остання зміна 2024/05/19 21:19 автором Ashterix
Підсумок
-
Властивості сторінки (1 змінено, 0 додано, 0 видалено)
Подробиці
- Властивості сторінки
-
- Вміст
-
... ... @@ -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}}