|
1 | 1 | --- |
2 | 2 | head: |
3 | | - - - link |
4 | | - - name: canonical |
5 | | - content: https://g5guide.github.io/developers/cache.html |
| 3 | + - - meta |
| 4 | + - http-equiv: refresh |
| 5 | + content: 0; url=https://damoang-users.github.io/gnuboard5-guide/developers/cache.html |
6 | 6 | --- |
7 | | -# 캐시 (Cache) |
8 | 7 |
|
9 | | -TBD |
10 | | - |
11 | | -DB에서 가져온 값이나 가공된 값을 캐시에 담아두고 빠르게 재사용할 수 있다. |
12 | | -그누보드에서는 현재 최근게시물 위젯의 캐시만 사용하고 있다. |
13 | | - |
14 | | -클래스 객체의 멤버 변수를 이용한 Object Cache와 파일을 이용한 캐시를 지원하며 파일 캐시는 사용자가 다른 수단으로 대체할 수 있다. |
15 | | - |
16 | | -## 오브젝트 캐시 |
17 | | - |
18 | | -오브젝트 캐시는 접속자의 세션에서만 유지된다. 즉, 휘발성이다. |
19 | | -[전역변수의 오염](/developers/polluted_variables)을 방지하고 공유하는 용도로 사용할 수 있다. |
20 | | - |
21 | | -오브젝트 캐시는 `type`으로 분류되며 `bbs` 또는 `content` 두 가지 타입을 지원 한다. |
22 | | -`bbs`는 게시판의 글의 데이터, `content`는 '게시판 관리 -> 내용관리'의 데이터가 저장된다. |
23 | | - |
24 | | -`type`의 하위 분류로 `group`을 지정할 수 있으며 group을 지정하지 않으면 `default` 그룹 이름으로 분류된다. |
25 | | - |
26 | | -`G5_object_cache` 클래스로 이용할 수 있지만, 단일 인스턴스를 위해 `$g5_object` 전역변수를 사용해야 한다. |
27 | | - |
28 | | -### set() |
29 | | - |
30 | | -::: warning |
31 | | -`bbs`, `content` 외의 커스텀 타입은 임의의 공통 타입으로 지정되어 사실상 타입 지정이 무시되어 구분되지 않으므로 주의해야 한다. group과 key를 고유한 이름으로 지정해야한다. |
32 | | -::: |
33 | | - |
34 | | -```php |
35 | | -# 게시물 타입 예시 |
36 | | -$data = []; |
37 | | -$g5_object->set('bbs', $wr_id, $data, $bo_table); |
38 | | - |
39 | | -# 커스텀 타입 예시 |
40 | | -$type = 'my_plugin'; |
41 | | -$key = 'config1'; |
42 | | -$data = []; |
43 | | -$g5_object->set($type, $key, $data, 'my_plugin_config'); |
44 | | -``` |
45 | | - |
46 | | -### get() |
47 | | - |
48 | | -캐시에 저장된 데이터를 반환하고, 저장된 데이터가 없으면 `false`를 반환 한다. |
49 | | - |
50 | | -```php |
51 | | -# 게시물 데이터 가져오기 |
52 | | -// 게시물은 세번째 인자인 그룹은 게시판 ID(bo_table)를 지정해야 한다 |
53 | | -$document = $g5_object->get('bbs', $wr_id, $bo_table); |
54 | | -``` |
55 | | - |
56 | | -캐시에서 가져온 데이터를 변경 후 캐시 데이터에도 반영하려면 변경한 데이터를 캐시에 다시 저장해야 한다. |
57 | | - |
58 | | -```php |
59 | | -$document['wr_subject'] = str_replace(' ', ' ', $document['wr_subject']); |
60 | | -$g5_object->set('bbs', $wr_id, $document, $bo_table); |
61 | | -``` |
62 | | - |
63 | | -::: tip |
64 | | -값으로 `false`를 저장하면 데이터가 없는 상태(`false`)와 구분하지 못하므로 귀찮아도 배열에 담아 저장해두는 것이 좋다. |
65 | | -::: |
66 | | - |
67 | | -### exists() |
68 | | - |
69 | | -```php |
70 | | -function exists($type, $key, $group = 'default'); |
71 | | -``` |
72 | | - |
73 | | -### delete() |
74 | | - |
75 | | -```php |
76 | | -function delete($type, $key, $group = 'default'); |
77 | | -``` |
78 | | - |
79 | | -## 파일 캐시 |
80 | | - |
81 | | -파일 캐시는 오브젝트 캐시와 달리 파일에 저장하고 모든 접속자의 세션에서 공유하여 사용할 수 있다. |
82 | | - |
83 | | -캐시를 저장할 때 유지시간(TTL)을 지정하여 자동으로 만료시킬 수 있으며, TTL을 설정하지 않았더라도 데이터를 가져올 때 `$expired_time`을 지정하여 만료시킬 수 있다. |
84 | | - |
85 | | -데이터를 가져올 때 지정하는 `$expired_time`은 목적에 따라 캐시를 만료시키는 상황을 분리할 수 있다. 예로, |
86 | | - |
87 | | -### g5_set_cache() |
88 | | - |
89 | | -`$ttl`을 지정하면 지정된 시간(초 단위)이 지나면 자동으로 만료된다. TTL은 선택사항이며 지정하지 않으면 자동으로 만료되지 않는다. |
90 | | - |
91 | | -오브젝트 캐시와 마찬가지로 값으로 `false`를 저장하면 캐시가 없거나 만료된 상태와 구분할 수 없으므로 주의해야 한다. |
92 | | - |
93 | | -```php |
94 | | -# 데이터 저장 |
95 | | -$key = 'my_plugin_cache_data'; |
96 | | -$save_data = array(); |
97 | | -$ttl = 600; // 초(second) |
98 | | -g5_set_cache($key, $save_data, $ttl); |
99 | | -``` |
100 | | - |
101 | | -::: details |
102 | | - |
103 | | -```php |
104 | | -/** |
105 | | - * @param string $key |
106 | | - * @param mixed $save_data |
107 | | - * @param int $ttl 초 단위 |
108 | | - * @return false|mixed |
109 | | - */ |
110 | | -function g5_set_cache($key, $save_data, $ttl = null); |
111 | | -``` |
112 | | - |
113 | | -::: |
114 | | - |
115 | | -### g5_get_cache() |
116 | | - |
117 | | -파일 캐시에서 데이터를 가져온다. |
118 | | -저장된 데이터가 없거나 만료되었다면 `false`를 반환 한다. |
119 | | - |
120 | | -```php |
121 | | -$myPluginConfig = g5_get_cache($key); |
122 | | - |
123 | | -// 캐시에서 데이터를 가져오지 못하면 DB에서 가져오기 |
124 | | -if ($myPluginConfig === false) { |
125 | | - // $myPluginConfig = ...; |
126 | | -} |
127 | | -``` |
128 | | - |
129 | | -`$expired_time`은 초(second) 단위로 지정할 수 있으며, 현재로부터 n초 이내의 데이터만 유지되며 그 이전의 캐시는 만료시킨다. |
130 | | - |
131 | | -```php |
132 | | -$expired_time = 600; // 초 단위 |
133 | | -$myPluginConfig = g5_get_cache($key, $expired_time); |
134 | | -``` |
135 | | - |
136 | | -```php |
137 | | -function g5_set_cache($key, $save_data, $ttl = null); |
138 | | -function g5_get_cache($key, $expired_time=0); |
139 | | -function g5_delete_cache($key); |
140 | | -function g5_delete_all_cache(); |
141 | | -function g5_delete_cache_by_prefix($key); |
142 | | -``` |
143 | | - |
144 | | -::: warning |
145 | | -그누보드의 데이터는 예상하거나 감지할 수 없는 변경이 발생할 수 있어 캐시를 제때 갱신하지 못할 수 있다. 데이터를 가져오거나 저장하는 인터페이스가 거의 제공되지 않기 때문에 통제되지 않는 데이터 변경이 예상된다면 캐시를 사용하지 않는 것을 권장한다. |
146 | | -::: |
147 | | - |
148 | | -### 확장하기 |
149 | | - |
150 | | -- function get_cachemanage_instance() |
151 | | - |
152 | | -- https://sir.kr/g5_plugin/8665 |
| 8 | +[변경된 주소로 바로가기](https://damoang-users.github.io/gnuboard5-guide/developers/cache.html) |
0 commit comments