Memcache.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. namespace ZN\Caching\Drivers;
  3. use ZN\Caching\CacheInterface;
  4. class MemcacheDriver implements CacheInterface
  5. {
  6. //----------------------------------------------------------------------------------------------------
  7. //
  8. // Yazar : Ozan UYKUN <ozanbote@windowslive.com> | <ozanbote@gmail.com>
  9. // Site : www.zntr.net
  10. // Lisans : The MIT License
  11. // Telif Hakkı: Copyright (c) 2012-2016, zntr.net
  12. //
  13. //----------------------------------------------------------------------------------------------------
  14. public function __construct()
  15. {
  16. if( $this->isSupported() === false )
  17. {
  18. die(getErrorMessage('Cache', 'unsupported', 'Memcache'));
  19. }
  20. }
  21. /******************************************************************************************
  22. * CONNECT *
  23. *******************************************************************************************
  24. | Genel Kullanım: Nesne tanımlaması ve ön bellek ayarları çalıştırılıyor. |
  25. | |
  26. ******************************************************************************************/
  27. public function connect($settings = [])
  28. {
  29. $config = \Config::get('Cache', 'driverSettings');
  30. $config = ! empty($settings)
  31. ? $settings
  32. : $config['memcache'];
  33. $connect = @memcache_add_server($config['host'], $config['port'], $config['weight']);
  34. if( empty($connect) )
  35. {
  36. die(getErrorMessage('Cache', 'unsupported', 'Memcache'));
  37. }
  38. return true;
  39. }
  40. /******************************************************************************************
  41. * SELECT *
  42. *******************************************************************************************
  43. | Genel Kullanım: Önbelleğe alınmış nesneyi çağırmak için kullanılır. |
  44. | |
  45. | Parametreler: Tek parametresi vardır. |
  46. | 1. string var @key => Nesne anahtarı. |
  47. | |
  48. | Örnek Kullanım: ->get('nesne'); |
  49. | |
  50. ******************************************************************************************/
  51. public function select($key = '')
  52. {
  53. $data = memcache_get($key);
  54. return ( is_array($data) )
  55. ? $data[0]
  56. : $data;
  57. }
  58. /******************************************************************************************
  59. * INSERT *
  60. *******************************************************************************************
  61. | Genel Kullanım: Ön bellekte değişken saklamak için kullanılır. |
  62. | |
  63. | Parametreler: 4 parametresi vardır. |
  64. | 1. string var @key => Nesne anahtarı. |
  65. | 2. variable var @var => Nesne. |
  66. | 3. numeric var @time => Saklanacağı zaman. |
  67. | 4. mixed var @compressed => Sıkıştırma. |
  68. | |
  69. | Örnek Kullanım: ->get('nesne'); |
  70. | |
  71. ******************************************************************************************/
  72. public function insert($key = '', $var = '', $time = 60, $compressed = false)
  73. {
  74. if( $compressed !== true )
  75. {
  76. $var = [$var, time(), $time];
  77. }
  78. return memcache_set($key, $var, 0, $time);
  79. }
  80. /******************************************************************************************
  81. * DELETE *
  82. *******************************************************************************************
  83. | Genel Kullanım: Ön bellekten nesneyi silmek için kullanılır. |
  84. | |
  85. | Parametreler: Tek parametresi vardır. |
  86. | 1. string var @key => Nesne anahtarı. |
  87. | |
  88. | Örnek Kullanım: ->delete('nesne'); |
  89. | |
  90. ******************************************************************************************/
  91. public function delete($key = '')
  92. {
  93. return memcache_delete($key);
  94. }
  95. /******************************************************************************************
  96. * INCREMENT *
  97. *******************************************************************************************
  98. | Genel Kullanım: Nesnenin değerini artımak için kullanılır. |
  99. | |
  100. | Parametreler: 2 parametresi vardır. |
  101. | 1. string var @key => Nesne anahtarı. |
  102. | 2. numeric var @increment => Artırım miktarı. |
  103. | |
  104. | Örnek Kullanım: ->increment('nesne', 1); |
  105. | |
  106. ******************************************************************************************/
  107. public function increment($key = '', $increment = 1)
  108. {
  109. return memcache_increment($key, $increment);
  110. }
  111. /******************************************************************************************
  112. * DECREMENT *
  113. *******************************************************************************************
  114. | Genel Kullanım: Nesnenin değerini azaltmak için kullanılır. |
  115. | |
  116. | Parametreler: 2 parametresi vardır. |
  117. | 1. string var @key => Nesne anahtarı. |
  118. | 2. numeric var @decrement => Azaltım miktarı. |
  119. | |
  120. | Örnek Kullanım: ->decrement('nesne', 1); |
  121. | |
  122. ******************************************************************************************/
  123. public function decrement($key = '', $decrement = 1)
  124. {
  125. memcache_decrement($key, $decrement);
  126. }
  127. /******************************************************************************************
  128. * CLEAN *
  129. *******************************************************************************************
  130. | Genel Kullanım: Tüm önbelleği silmek için kullanılır. |
  131. | |
  132. ******************************************************************************************/
  133. public function clean()
  134. {
  135. return memcache_flush();
  136. }
  137. /******************************************************************************************
  138. * INFO *
  139. *******************************************************************************************
  140. | Genel Kullanım: Ön bellekleme hakkında bilgi edinmek için kullanılır. |
  141. | |
  142. | Parametreler: Tek parametresi vardır. |
  143. | 1. string var @type => Bilgi alınacak kullanıcı türü. |
  144. | |
  145. | Örnek Kullanım: ->info('user'); |
  146. | |
  147. ******************************************************************************************/
  148. public function info($type = NULL)
  149. {
  150. return memcache_get_stats(true);
  151. }
  152. /******************************************************************************************
  153. * GET METADATA *
  154. *******************************************************************************************
  155. | Genel Kullanım: Ön bellekteki nesne hakkında bilgi almak için kullanılır. |
  156. | |
  157. | Parametreler: Tek parametresi vardır. |
  158. | 1. string var @key => Bilgi alınacak nesne. |
  159. | |
  160. | Örnek Kullanım: ->get_metadata('nesne'); |
  161. | |
  162. ******************************************************************************************/
  163. public function getMetaData($key = '')
  164. {
  165. $stored = memcache_get($key);
  166. if( count($stored) !== 3 )
  167. {
  168. return false;
  169. }
  170. list($data, $time, $expire) = $stored;
  171. return array
  172. (
  173. 'expire' => $time + $expire,
  174. 'mtime' => $time,
  175. 'data' => $data
  176. );
  177. }
  178. /******************************************************************************************
  179. * IS SUPPORTED *
  180. *******************************************************************************************
  181. | Genel Kullanım: Sürücünün desteklenip desklenmediğini öğrenmek için kullanılır. |
  182. | |
  183. ******************************************************************************************/
  184. public function isSupported()
  185. {
  186. if( ! extension_loaded('memcached') && ! extension_loaded('memcache') )
  187. {
  188. return \Errors::set('Cache', 'unsupported', 'Memcache');
  189. }
  190. return $this->connect();
  191. }
  192. }