init
uk/docs/api/json-rpc-bundle/add_rpc_service/cache.md
новий файл +130
−0
1
+
## Summary
2
+
3
+
4
+
<block class='floatinginfobox'>
5
+
6
+
<columns border="1" zebra="1">
7
+
<col width="40%">
8
+
9
+
**Classname**
10
+
</col>
11
+
<col>
12
+
`Cache`
13
+
</col>
14
+
</row>
15
+
<col width="40%">
16
+
17
+
**Namespace**
18
+
</col>
19
+
<col>
20
+
21
+
`Ufo\RpcObject\RPC`
22
+
</col>
23
+
</row>
24
+
<col width="40%">
25
+
26
+
**Target**
27
+
</col>
28
+
<col>
29
+
30
+
`method`
31
+
</col>
32
+
</columns>
33
+
34
+
<columns border="1" zebra="1">
35
+
<col align="center">
36
+
Constructor
37
+
</col>
38
+
</row>
39
+
<col>
40
+
41
+
```php
42
+
/**
43
+
* Cache constructor.
44
+
*
45
+
* @param int $lifetimeSecond
46
+
* @param array $environments
47
+
*/
48
+
public function __construct(
49
+
public int $lifetimeSecond = self::T_MINUTE,
50
+
public array $environments = [self::ENV_PROD],
51
+
) {}
52
+
```
53
+
54
+
</col>
55
+
</columns>
56
+
57
+
</block>
58
+
59
+
# Кешування відповіді методу
60
+
61
+
За замовченням кешування відповідей ваших RPC методів вимкнено і кожен раз, коли ви викликаєте API, метод буде викликано.
62
+
63
+
Проте, інколи, для певних методів, результат яких змінюється не часто, є сенс ввімкнути кешування відповіді задля підвищення швидкості обробки запитів, для збереження лімітів, зниження навантаження на частини системи, тощо.
64
+
65
+
RPC Server використовує саме ту реалізацію CacheInterface від Symfony, яка використовується в вашому в проєкті. Таким чином, немає потреби в додатковому налаштуванні.
66
+
67
+
Ввімкнути кешування максимально просто, єдине що вам потрібно зробити це до певного методу додати атрибут `#[RPC\Cache]`.
68
+
69
+
70
+
```php
71
+
namespace App\Api\Procedures;
72
+
73
+
use Ufo\RpcObject\RPC;
74
+
75
+
class SomeApiMethod implements IRpcService
76
+
{
77
+
#[RPC\Cache]
78
+
public function methodThatWorksForALongTime(): void {}
79
+
}
80
+
```
81
+
82
+
Це налаштування дозволить кешувати відповідь впродовж однієї хвилини, кожен наступний запит на цей метод з тими самими параметрами буде отримувати відповідь миттєво з кеша.
83
+
84
+
Скинути кеш можна як і завжди, виконавши Symfony команду
85
+
86
+
```bash
87
+
bin/console cache:clear
88
+
```
89
+
90
+
В разі потреби ви можете збільшити час життя кеша, передавши кількість секунд в параметр lifetimeSecond. Для зручності створені константи, які покривають більшість потреб, але ви також можете передати значення простим числом.
91
+
92
+
```php
93
+
use Ufo\RpcObject\RPC\Cache;
94
+
95
+
Cache::T_MINUTE; // 60
96
+
Cache::T_5_MINUTES; // 300
97
+
Cache::T_10_MINUTES; // 600
98
+
Cache::T_30_MINUTES; // 1800
99
+
Cache::T_HOUR; // 3600
100
+
Cache::T_2_HOURS; // 7200
101
+
Cache::T_5_HOURS; // 18000
102
+
Cache::T_10_HOURS; // 36000
103
+
Cache::T_DAY; // 86400
104
+
Cache::T_2_DAYS; // 172800
105
+
Cache::T_3_DAYS; // 259200
106
+
Cache::T_5_DAYS; // 432000
107
+
Cache::T_10_DAYS; // 864000
108
+
Cache::T_WEEK; // 604800
109
+
Cache::T_2_WEEKS; // 1209600
110
+
Cache::T_3_WEEKS; // 1814400
111
+
Cache::T_MONTH; // 2592000
112
+
Cache::T_2_MONTHS; // 5184000
113
+
Cache::T_3_MONTHS; // 7776000
114
+
Cache::T_HALF_YEAR; // 15724800
115
+
Cache::T_YEAR; // 31536000
116
+
```
117
+
118
+
Також ви можете змінити налаштування оточення на якому кеш може бути ввімкнений. За замовченням кешування працює лише в оточенні prod. Але ви можете це змінити передавши масивом назви оточень, в яких хочете кешувати результати. У прикладі нижче результат буде кешуватися протягом однієї доби для prod і dev оточень.
119
+
120
+
```php
121
+
namespace App\Api\Procedures;
122
+
123
+
use Ufo\RpcObject\RPC;
124
+
125
+
class SomeApiMethod implements IRpcService
126
+
{
127
+
#[RPC\Cache(lifetimeSecond: RPC\Cache::T_DAY, environments: ['dev', 'prod'])]
128
+
public function methodThatWorksForALongTime(): void {}
129
+
}
130
+
```