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

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

Last change on this file since 3182 was 3182, 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        array_unshift($funcarg, $function);
72        $cache =& get_cache_lite_function();
73        $cache->setOption('lifeTime', intval($lifetime));
74        return call_user_func_array(array(&$cache, 'call'), $funcarg);
75    } else {
76        return call_user_func_array($function, $funcarg);
77    }
78}
79
80//---
81
82/**
83 * メンバー情報取得関連のfunction cacheを削除する
84 */
85function cache_drop_c_member($c_member_id)
86{
87    $c_member_id = (int)$c_member_id;
88    pne_cache_drop('db_friend_c_friend_id_list4c_member_id', $c_member_id, 9);  //フレンドリスト
89    pne_cache_drop('db_friend_c_friend_list_random4c_member_id', $c_member_id, 5);
90    pne_cache_drop('p_h_home_c_diary_friend_list4c_member_id', $c_member_id, 5);  //最新日記フィード
91    $c_member_id = (string)$c_member_id;
92    pne_cache_drop('db_friend_c_friend_id_list4c_member_id', $c_member_id, 9);  //フレンドリスト
93    pne_cache_drop('db_friend_c_friend_list_random4c_member_id', $c_member_id, 5);
94    pne_cache_drop('p_h_home_c_diary_friend_list4c_member_id', $c_member_id, 5);  //最新日記フィード
95
96    //誕生日フィード
97    include_once 'Calendar/Week.php';
98
99    $Week = new Calendar_Week(date('Y'), date('m'), date('d'), 0);
100    $Week->build();
101    while ($Day = $Week->fetch()) {
102        $m = $Day->thisMonth();
103        $d = $Day->thisDay();
104        $c_member_id = (int)$c_member_id;
105        pne_cache_drop('db_member_birth4c_member_id', $m, $d, $c_member_id);
106        $c_member_id = (string)$c_member_id;
107        pne_cache_drop('db_member_birth4c_member_id', $m, $d, $c_member_id);
108    }
109
110    cache_drop_c_friend_intro($c_member_id);  //紹介文
111}
112
113/**
114 * コミュニティ情報取得関連のfunction cacheを削除する
115 */
116function cache_drop_c_commu($c_commu_id)
117{
118    $c_commu_id = (int)$c_commu_id;
119    pne_cache_drop('db_commu_c_commu4c_commu_id_k',$c_commu_id);
120    pne_cache_drop('db_commu_c_commu_member_list_random4c_commu_id', $c_commu_id, 5);
121    pne_cache_drop('db_commu_c_commu_member_list4c_commu_id', $c_commu_id, 9);
122    pne_cache_drop('db_commu_c_commu4c_commu_id2', $c_commu_id);
123    $c_commu_id = (string)$c_commu_id;
124    pne_cache_drop('db_commu_c_commu4c_commu_id_k',$c_commu_id);
125    pne_cache_drop('db_commu_c_commu_member_list_random4c_commu_id', $c_commu_id, 5);
126    pne_cache_drop('db_commu_c_commu_member_list4c_commu_id', $c_commu_id, 9);
127    pne_cache_drop('db_commu_c_commu4c_commu_id2', $c_commu_id);
128
129    $c_commu_topic_list = db_commu_new_topic_comment4c_commu_id($c_commu_id, 7);
130    $c_commu_event_list = db_commu_new_topic_comment4c_commu_id($c_commu_id, 7, 1);
131    $c_commu_bbs_list = array_merge($c_commu_topic_list, $c_commu_event_list);
132
133    foreach ($c_commu_bbs_list as $c_commu_topic_id) {
134        $c_commu_topic_id = (int)$c_commu_topic_id;
135        cache_drop_c_commu_topic($c_commu_topic_id);
136        $c_commu_topic_id = (string)$c_commu_topic_id;
137        cache_drop_c_commu_topic($c_commu_topic_id);
138    }
139
140    $c_commu_member_total_num = _db_count_c_commu_member_list4c_commu_id($c_commu_id);
141    $c_commu_member_list = db_commu_c_member_list4c_commu_id($c_commu_id, 1, $c_commu_member_total_num);
142    foreach ($c_commu_member_list[0] as $c_member) {
143        cache_drop_c_commu_list4c_member_id($c_member['c_member_id']);
144    }
145}
146
147/**
148 * コミュニティトピック情報取得関連のfunction cacheを削除する
149 */
150function cache_drop_c_commu_topic($c_commu_topic_id)
151{
152    $c_commu_topic_id = (int)$c_commu_topic_id;
153    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7);
154    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7, 0);
155    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7, 1);
156    $c_commu_topic_id = (string)$c_commu_topic_id;
157    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7);
158    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7, 0);
159    pne_cache_drop('db_commu_new_topic_comment4c_commu_id', $c_commu_topic_id, 7, 1);
160}
161
162/**
163 * c_memberに関連したコミュニティ情報取得関連のfunction cacheを削除する
164 */
165function cache_drop_c_commu_list4c_member_id($c_member_id)
166{
167    $c_member_id = (int)$c_member_id;
168    pne_cache_drop('db_commu_c_commu_list_lastupdate4c_member_id', $c_member_id, 5);
169    pne_cache_drop('db_commu_c_commu_list4c_member_id_2', $c_member_id, 9);
170    $c_member_id = (string)$c_member_id;
171    pne_cache_drop('db_commu_c_commu_list_lastupdate4c_member_id', $c_member_id, 5);
172    pne_cache_drop('db_commu_c_commu_list4c_member_id_2', $c_member_id, 9);
173}
174
175
176/**
177 * 紹介文取得のfunction cacheを削除する
178 */
179function cache_drop_c_friend_intro($c_member_id)
180{
181    $c_member_id = (int)$c_member_id;
182    pne_cache_drop('db_friend_c_friend_intro_list4c_member_id', $c_member_id, 5);
183    pne_cache_drop('db_friend_c_friend_comment4c_member_id', $c_member_id);
184    $c_member_id = (string)$c_member_id;
185    pne_cache_drop('db_friend_c_friend_intro_list4c_member_id', $c_member_id, 5);
186    pne_cache_drop('db_friend_c_friend_comment4c_member_id', $c_member_id);
187}
188
189/**
190 * プロフィール取得のfunction cacheを削除する
191 * 旧関数名を呼んでいる限り引数の省略はないのでこれで暫定的な対応とする
192 */
193function cache_drop_c_member_profile($c_member_id)
194{
195    $c_member_id = (int)$c_member_id;
196    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id);
197    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'public');
198    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'friend');
199    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'private');
200    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'public');
201    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'friend');
202    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'private');
203    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'public');
204    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'friend');
205    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'private');
206    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'public');
207    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'friend');
208    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'private');
209    pne_cache_drop('db_member_c_profile_list');
210    $c_member_id = (string)$c_member_id;
211    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id);
212    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'public');
213    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'friend');
214    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, false, 'private');
215    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'public');
216    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'friend');
217    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, false, true, 'private');
218    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'public');
219    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'friend');
220    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, false, 'private');
221    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'public');
222    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'friend');
223    pne_cache_drop('db_member_c_member4c_member_id', $c_member_id, true, true, 'private');
224}
225
226/**
227 * お気に入り関連のfunction cacheを削除する
228 */
229function cache_drop_c_bookmark($c_member_id)
230{
231    $c_member_id = (int)$c_member_id;
232    pne_cache_drop('db_bookmark_member_list', $c_member_id, 9);
233    $c_member_id = (string)$c_member_id;
234    pne_cache_drop('db_bookmark_member_list', $c_member_id, 9);
235}
236?>
Note: See TracBrowser for help on using the repository browser.