cache.memcache.func.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. /**
  3. * [WeEngine System] Copyright (c) 2014 WE7.CC
  4. * WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details.
  5. */
  6. defined('IN_IA') or exit('Access Denied');
  7. function cache_memcache() {
  8. global $_W;
  9. static $memcacheobj;
  10. if (!extension_loaded('memcache')) {
  11. return error(1, 'Class Memcache is not found');
  12. }
  13. if (empty($memcacheobj)) {
  14. $config = $_W['config']['setting']['memcache'];
  15. $memcacheobj = new Memcache();
  16. if($config['pconnect']) {
  17. $connect = $memcacheobj->pconnect($config['server'], $config['port']);
  18. } else {
  19. $connect = $memcacheobj->connect($config['server'], $config['port']);
  20. }
  21. if(!$connect) {
  22. return error(-1, 'Memcache is not in work');
  23. }
  24. }
  25. return $memcacheobj;
  26. }
  27. function cache_read($key, $forcecache = true) {
  28. $key = cache_namespace($key);
  29. $memcache = cache_memcache();
  30. if (is_error($memcache)) {
  31. return $memcache;
  32. }
  33. $result = $memcache->get(cache_prefix($key));
  34. if (empty($result) && empty($forcecache)) {
  35. $dbcache = pdo_get('core_cache', array('key' => $key), array('value'));
  36. if (!empty($dbcache['value'])) {
  37. $result = iunserializer($dbcache['value']);
  38. $memcache->set(cache_prefix($key), $result);
  39. }
  40. }
  41. return $result;
  42. }
  43. function cache_search($key) {
  44. return cache_read(cache_prefix($key));
  45. }
  46. function cache_write($key, $value, $ttl = 0, $forcecache = true) {
  47. $key = cache_namespace($key);
  48. $memcache = cache_memcache();
  49. if (is_error($memcache)) {
  50. return $memcache;
  51. }
  52. if (empty($forcecache)) {
  53. $record = array();
  54. $record['key'] = $key;
  55. $record['value'] = iserializer($value);
  56. pdo_insert('core_cache', $record, true);
  57. }
  58. if ($memcache->set(cache_prefix($key), $value, MEMCACHE_COMPRESSED, $ttl)) {
  59. return true;
  60. } else {
  61. return false;
  62. }
  63. }
  64. function cache_delete($key, $forcecache = true) {
  65. $origins_cache_key = $key;
  66. $key = cache_namespace($key);
  67. $memcache = cache_memcache();
  68. if (is_error($memcache)) {
  69. return $memcache;
  70. }
  71. if (empty($forcecache)) {
  72. pdo_delete('core_cache', array('key' => $key));
  73. }
  74. if ($memcache->delete(cache_prefix($key))) {
  75. unset($GLOBALS['_W']['cache'][$origins_cache_key]);
  76. return true;
  77. } else {
  78. unset($GLOBALS['_W']['cache'][$origins_cache_key]);
  79. return false;
  80. }
  81. }
  82. function cache_clean($prefix = '') {
  83. if (!empty($prefix)) {
  84. $cache_namespace = cache_namespace($prefix, true);
  85. unset($GLOBALS['_W']['cache']);
  86. pdo_delete('core_cache', array('key LIKE' => $cache_namespace . '%'));
  87. return true;
  88. }
  89. $memcache = cache_memcache();
  90. if (is_error($memcache)) {
  91. return $memcache;
  92. }
  93. if ($memcache->flush()) {
  94. unset($GLOBALS['_W']['cache']);
  95. pdo_delete('core_cache');
  96. return true;
  97. } else {
  98. return false;
  99. }
  100. }
  101. function cache_namespace($key, $forcenew = false) {
  102. if (!strexists($key, ':')) {
  103. $namespace_cache_key = $key;
  104. } else {
  105. list($key1, $key2) = explode(':', $key);
  106. if ($key1 == 'we7') {
  107. $namespace_cache_key = $key2;
  108. } else {
  109. $namespace_cache_key = $key1;
  110. }
  111. }
  112. if (!in_array($namespace_cache_key, array('unimodules', 'user_modules'))) {
  113. return $key;
  114. }
  115. $namespace_cache_key = 'cachensl:' . $namespace_cache_key;
  116. $memcache = cache_memcache();
  117. if (is_error($memcache)) {
  118. return $memcache;
  119. }
  120. $namespace = $memcache->get(cache_prefix($namespace_cache_key));
  121. if (empty($namespace) || $forcenew) {
  122. $namespace = random(5);
  123. $memcache->set(cache_prefix($namespace_cache_key), $namespace, MEMCACHE_COMPRESSED, 0);
  124. }
  125. return $namespace . ':' . $key;
  126. }
  127. function cache_prefix($key) {
  128. return $GLOBALS['_W']['config']['setting']['authkey'] . $key;
  129. }