/webapp/lib/util/cache.php

https://github.com/4260/OpenPNE2 · PHP · 269 lines · 204 code · 22 blank · 43 comment · 10 complexity · f17faa601692dfc94de727a5d0ff0021 MD5 · raw file

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