ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/ebihara/prj_memcached/webapp/lib/util/cache.php @ 3181

Last change on this file since 3181 was 3181, checked in by ebihara, 13 years ago

memcachedに置くキャッシュの作成、削除ができるようにした

File size: 9.9 KB
Line 
1<?php
2/**
3 * @copyright 2005-2007 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7function &get_cache_lite_function()
8{
9    static $instance;
10    if (empty($instance)) {
11//        if (OPENPNE_USE_FUNCTION_CACHE_DB) {
12        if (false) {
13                include_once 'OpenPNE/Cache.php';
14            $instance = new OpenPNE_Cache_Function('db', $GLOBALS['_OPENPNE_DSN_LIST']['func_cache']);
15        } elseif (true) {
16                include_once 'OpenPNE/Cache.php';
17            $params = array('hostname' => '127.0.0.1', 'port' => '11211');
18            $instance = new OpenPNE_Cache_Function('memcached', $params);
19        } else {
20            include_once 'Cache/Lite/Function.php';
21            $options = array(
22                'cacheDir' => OPENPNE_VAR_DIR . '/function_cache/',
23                'hashedDirectoryLevel' => 2,
24                'hashedDirectoryUmask' => 0777,
25            );
26            $instance = new Cache_Lite_Function($options);
27        }
28    }
29    return $instance;
30}
31
32/**
33 * call function cache
34 */
35function pne_cache_call()
36{
37    $arg_list = func_get_args();
38    $lifetime = array_shift($arg_list);
39
40    if (OPENPNE_USE_FUNCTION_CACHE) {
41        $cache =& get_cache_lite_function();
42        $cache->setOption('lifeTime', intval($lifetime));
43        return call_user_func_array(array(&$cache, 'call'), $arg_list);
44    } else {
45        $function = array_shift($arg_list);
46        return call_user_func_array($function, $arg_list);
47    }
48}
49
50/**
51 * drop function cache
52 */
53function pne_cache_drop()
54{
55    $arg_list = func_get_args();
56   
57    if (OPENPNE_USE_FUNCITON_CACHE) {
58        $cache =& get_cache_lite_function();
59        return call_user_func_array(array(&$cache, 'drop'), $arg_list);
60    } else {
61        return true;
62    }
63}
64
65/***
66 * 再帰的に関数をコールする pne_cache_call
67 */
68function pne_cache_recursive_call($lifetime, $function, $funcarg)
69{
70    if (OPENPNE_USE_FUNCTION_CACHE) {
71        var_dump('rec');
72        array_unshift($funcarg, $function);
73        $cache =& get_cache_lite_function();
74        $cache->setOption('lifeTime', intval($lifetime));
75        return call_user_func_array(array(&$cache, 'call'), $funcarg);
76    } else {
77        return call_user_func_array($function, $funcarg);
78    }
79}
80
81//---
82
83/**
84 * メンバー情報取得関連のfunction cacheを削除する
85 */
86function cache_drop_c_member($c_member_id)
87{
88    $c_member_id = (int)$c_member_id;
89    pne_cache_drop('db_friend_c_friend_id_list4c_member_id', $c_member_id, 9);  //フレンドリスト
90    pne_cache_drop('db_friend_c_friend_list_random4c_member_id', $c_member_id, 5);
91    pne_cache_drop('p_h_home_c_diary_friend_list4c_member_id', $c_member_id, 5);  //最新日記フィード
92    $c_member_id = (string)$c_member_id;
93    pne_cache_drop('db_friend_c_friend_id_list4c_member_id', $c_member_id, 9);  //フレンドリスト
94    pne_cache_drop('db_friend_c_friend_list_random4c_member_id', $c_member_id, 5);
95    pne_cache_drop('p_h_home_c_diary_friend_list4c_member_id', $c_member_id, 5);  //最新日記フィード
96
97    //誕生日フィード
98    include_once 'Calendar/Week.php';
99
100    $Week = new Calendar_Week(date('Y'), date('m'), date('d'), 0);
101    $Week->build();
102    while ($Day = $Week->fetch()) {
103        $m = $Day->thisMonth();
104        $d = $Day->thisDay();
105        $c_member_id = (int)$c_member_id;
106        pne_cache_drop('db_member_birth4c_member_id', $m, $d, $c_member_id);
107        $c_member_id = (string)$c_member_id;
108        pne_cache_drop('db_member_birth4c_member_id', $m, $d, $c_member_id);
109    }
110
111    cache_drop_c_friend_intro($c_member_id);  //紹介文
112}
113
114/**
115 * コミュニティ情報取得関連のfunction cacheを削除する
116 */
117function cache_drop_c_commu($c_commu_id)
118{
119    $c_commu_id = (int)$c_commu_id;
120    pne_cache_drop('db_commu_c_commu4c_commu_id_k',$c_commu_id);
121    pne_cache_drop('db_commu_c_commu_member_list_random4c_commu_id', $c_commu_id, 5);
122    pne_cache_drop('db_commu_c_commu_member_list4c_commu_id', $c_commu_id, 9);
123    pne_cache_drop('db_commu_c_commu4c_commu_id2', $c_commu_id);
124    $c_commu_id = (string)$c_commu_id;
125    pne_cache_drop('db_commu_c_commu4c_commu_id_k',$c_commu_id);
126    pne_cache_drop('db_commu_c_commu_member_list_random4c_commu_id', $c_commu_id, 5);
127    pne_cache_drop('db_commu_c_commu_member_list4c_commu_id', $c_commu_id, 9);
128    pne_cache_drop('db_commu_c_commu4c_commu_id2', $c_commu_id);
129
130    $c_commu_topic_list = db_commu_new_topic_comment4c_commu_id($c_commu_id, 7);
131    $c_commu_event_list = db_commu_new_topic_comment4c_commu_id($c_commu_id, 7, 1);
132    $c_commu_bbs_list = array_merge($c_commu_topic_list, $c_commu_event_list);
133
134    foreach ($c_commu_bbs_list as $c_commu_topic_id) {
135        $c_commu_topic_id = (int)$c_commu_topic_id;
136        cache_drop_c_commu_topic($c_commu_topic_id);
137        $c_commu_topic_id = (string)$c_commu_topic_id;
138        cache_drop_c_commu_topic($c_commu_topic_id);
139    }
140
141    $c_commu_member_total_num = _db_count_c_commu_member_list4c_commu_id($c_commu_id);
142    $c_commu_member_list = db_commu_c_member_list4c_commu_id($c_commu_id, 1, $c_commu_member_total_num);
143    foreach ($c_commu_member_list[0] as $c_member) {
144        cache_drop_c_commu_list4c_member_id($c_member['c_member_id']);
145    }
146}
147
148/**
149 * コミュニティトピック情報取得関連のfunction cacheを削除する
150 */
151function cache_drop_c_commu_topic($c_commu_topic_id)
152{
153    $c_commu_topic_id = (int)$c_commu_topic_id;
154    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7);
155    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7, 0);
156    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7, 1);
157    $c_commu_topic_id = (string)$c_commu_topic_id;
158    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7);
159    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7, 0);
160    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7, 1);
161}
162
163/**
164 * c_memberに関連したコミュニティ情報取得関連のfunction cacheを削除する
165 */
166function cache_drop_c_commu_list4c_member_id($c_member_id)
167{
168    $c_member_id = (int)$c_member_id;
169    pne_cache_drop('db_commu_c_commu_list_lastupdate4c_member_id', $c_member_id, 5);
170    pne_cache_drop('db_commu_c_commu_list4c_member_id_2', $c_member_id, 9);
171    $c_member_id = (string)$c_member_id;
172    pne_cache_drop('db_commu_c_commu_list_lastupdate4c_member_id', $c_member_id, 5);
173    pne_cache_drop('db_commu_c_commu_list4c_member_id_2', $c_member_id, 9);
174}
175
176
177/**
178 * 紹介文取得のfunction cacheを削除する
179 */
180function cache_drop_c_friend_intro($c_member_id)
181{
182    $c_member_id = (int)$c_member_id;
183    pne_cache_drop('db_friend_c_friend_intro_list4c_member_id', $c_member_id, 5);
184    pne_cache_drop('db_friend_c_friend_comment4c_member_id', $c_member_id);
185    $c_member_id = (string)$c_member_id;
186    pne_cache_drop('db_friend_c_friend_intro_list4c_member_id', $c_member_id, 5);
187    pne_cache_drop('db_friend_c_friend_comment4c_member_id', $c_member_id);
188}
189
190/**
191 * プロフィール取得のfunction cacheを削除する
192 * 旧関数名を呼んでいる限り引数の省略はないのでこれで暫定的な対応とする
193 */
194function cache_drop_c_member_profile($c_member_id)
195{
196    $c_member_id = (int)$c_member_id;
197    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id);
198    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'public');
199    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'friend');
200    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'private');
201    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'public');
202    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'friend');
203    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'private');
204    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'public');
205    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'friend');
206    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'private');
207    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'public');
208    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'friend');
209    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'private');
210    pne_cache_drop('db_member_c_profile_list');
211    $c_member_id = (string)$c_member_id;
212    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id);
213    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'public');
214    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'friend');
215    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'private');
216    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'public');
217    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'friend');
218    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'private');
219    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'public');
220    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'friend');
221    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'private');
222    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'public');
223    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'friend');
224    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'private');
225}
226
227/**
228 * お気に入り関連のfunction cacheを削除する
229 */
230function cache_drop_c_bookmark($c_member_id)
231{
232    $c_member_id = (int)$c_member_id;
233    pne_cache_drop('db_bookmark_member_list', $c_member_id, 9);
234    $c_member_id = (string)$c_member_id;
235    pne_cache_drop('db_bookmark_member_list', $c_member_id, 9);
236}
237?>
Note: See TracBrowser for help on using the repository browser.