PageRenderTime 42ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/Library/Command/Memcached.php

http://phpmemcacheadmin.googlecode.com/
PHP | 288 lines | 96 code | 24 blank | 168 comment | 6 complexity | 77c4aad629f81c2b65384f2dcaf88e8f MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright 2010 Cyrille Mahieux
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and limitations
  14. * under the License.
  15. *
  16. * ><)))°> ><)))°> ><)))°> ><)))°> ><)))°> ><)))°> ><)))°> ><)))°> ><)))°>
  17. *
  18. * Sending command to memcache server via PECL memcache API http://pecl.php.net/package/memcache
  19. *
  20. * @author c.mahieux@of2m.fr
  21. * @since 20/03/2010
  22. */
  23. class Library_Command_Memcached implements Library_Command_Interface
  24. {
  25. private static $_ini;
  26. private static $_memcache;
  27. /**
  28. * Constructor
  29. *
  30. * @param Array $ini Array from ini_parse
  31. *
  32. * @return void
  33. */
  34. public function __construct()
  35. {
  36. # Importing configuration
  37. self::$_ini = Library_Configuration_Loader::singleton();
  38. # Initializing
  39. self::$_memcache = new Memcached();
  40. }
  41. /**
  42. * Send stats command to server
  43. * Return the result if successful or false otherwise
  44. *
  45. * @param String $server Hostname
  46. * @param Integer $port Hostname Port
  47. *
  48. * @return Array|Boolean
  49. */
  50. public function stats($server, $port)
  51. {
  52. # Adding server
  53. self::$_memcache->addServer($server, $port);
  54. # Executing command
  55. if(($return = self::$_memcache->getStats()))
  56. {
  57. # Delete server key based
  58. $stats = $return[$server.':'.$port];
  59. # Adding value that miss
  60. $stats['delete_hits'] = '';
  61. $stats['delete_misses'] = '';
  62. $stats['incr_hits'] = '';
  63. $stats['incr_misses'] = '';
  64. $stats['decr_hits'] = '';
  65. $stats['decr_misses'] = '';
  66. $stats['cas_hits'] = '';
  67. $stats['cas_misses'] = '';
  68. $stats['cas_badval'] = '';
  69. return $stats;
  70. }
  71. return false;
  72. }
  73. /**
  74. * Send stats settings command to server
  75. * Return the result if successful or false otherwise
  76. *
  77. * @param String $server Hostname
  78. * @param Integer $port Hostname Port
  79. *
  80. * @return Array|Boolean
  81. */
  82. public function settings($server, $port)
  83. {
  84. return false;
  85. }
  86. /**
  87. * Send stats items command to server to retrieve slabs stats
  88. * Return the result if successful or false otherwise
  89. *
  90. * @param String $server Hostname
  91. * @param Integer $port Hostname Port
  92. *
  93. * @return Array|Boolean
  94. */
  95. public function slabs($server, $port)
  96. {
  97. throw new Exception('PECL Memcache does not support slabs stats, use Server or Memcache instead');
  98. }
  99. /**
  100. * Send stats cachedump command to server to retrieve slabs items
  101. * Return the result if successful or false otherwise
  102. *
  103. * @param String $server Hostname
  104. * @param Integer $port Hostname Port
  105. * @param Interger $slab Slab ID
  106. *
  107. * @return Array|Boolean
  108. */
  109. public function items($server, $port, $slab)
  110. {
  111. throw new Exception('PECL Memcache does not support slabs items stats, use Server or Memcache instead');
  112. }
  113. /**
  114. * Send get command to server to retrieve an item
  115. * Return the result
  116. *
  117. * @param String $server Hostname
  118. * @param Integer $port Hostname Port
  119. * @param String $key Key to retrieve
  120. *
  121. * @return String
  122. */
  123. public function get($server, $port, $key)
  124. {
  125. # Adding server
  126. self::$_memcache->addServer($server, $port);
  127. # Executing command : get
  128. if($item = self::$_memcache->get($key))
  129. {
  130. return print_r($item, true);
  131. }
  132. return self::$_memcache->getResultMessage();
  133. }
  134. /**
  135. * Set an item
  136. * Return the result
  137. *
  138. * @param String $server Hostname
  139. * @param Integer $port Hostname Port
  140. * @param String $key Key to store
  141. * @param Mixed $data Data to store
  142. * @param Integer $duration Duration
  143. *
  144. * @return String
  145. */
  146. function set($server, $port, $key, $data, $duration)
  147. {
  148. # Adding server
  149. self::$_memcache->addServer($server, $port);
  150. # Checking duration
  151. if($duration == '') { $duration = 0; }
  152. # Executing command : set
  153. self::$_memcache->set($key, $data, $duration);
  154. return self::$_memcache->getResultMessage();
  155. }
  156. /**
  157. * Delete an item
  158. * Return the result
  159. *
  160. * @param String $server Hostname
  161. * @param Integer $port Hostname Port
  162. * @param String $key Key to delete
  163. *
  164. * @return String
  165. */
  166. public function delete($server, $port, $key)
  167. {
  168. # Adding server
  169. self::$_memcache->addServer($server, $port);
  170. # Executing command : delete
  171. self::$_memcache->delete($key);
  172. return self::$_memcache->getResultMessage();
  173. }
  174. /**
  175. * Increment the key by value
  176. * Return the result
  177. *
  178. * @param String $server Hostname
  179. * @param Integer $port Hostname Port
  180. * @param String $key Key to increment
  181. * @param Integer $value Value to increment
  182. *
  183. * @return String
  184. */
  185. function increment($server, $port, $key, $value)
  186. {
  187. # Adding server
  188. self::$_memcache->addServer($server, $port);
  189. # Executing command : increment
  190. if($result = self::$_memcache->increment($key, $value))
  191. {
  192. return $result;
  193. }
  194. return self::$_memcache->getResultMessage();
  195. }
  196. /**
  197. * Decrement the key by value
  198. * Return the result
  199. *
  200. * @param String $server Hostname
  201. * @param Integer $port Hostname Port
  202. * @param String $key Key to decrement
  203. * @param Integer $value Value to decrement
  204. *
  205. * @return String
  206. */
  207. function decrement($server, $port, $key, $value)
  208. {
  209. # Adding server
  210. self::$_memcache->addServer($server, $port);
  211. # Executing command : decrement
  212. if($result = self::$_memcache->decrement($key, $value))
  213. {
  214. return $result;
  215. }
  216. return self::$_memcache->getResultMessage();
  217. }
  218. /**
  219. * Flush all items on a server
  220. * Return the result
  221. *
  222. * @param String $server Hostname
  223. * @param Integer $port Hostname Port
  224. * @param Integer $delay Delay before flushing server
  225. *
  226. * @return String
  227. */
  228. public function flush_all($server, $port, $delay)
  229. {
  230. # Adding server
  231. self::$_memcache->addServer($server, $port);
  232. # Executing command : delete
  233. self::$_memcache->flush($delay);
  234. return self::$_memcache->getResultMessage();
  235. }
  236. /**
  237. * Search for item
  238. * Return all the items matching parameters if successful, false otherwise
  239. *
  240. * @param String $server Hostname
  241. * @param Integer $port Hostname Port
  242. * @param String $key Key to search
  243. *
  244. * @return Array
  245. */
  246. function search($server, $port, $search)
  247. {
  248. throw new Exception('PECL Memcached does not support search function, use Server instead');
  249. }
  250. /**
  251. * Execute a telnet command on a server
  252. * Return the result
  253. *
  254. * @param String $server Hostname
  255. * @param Integer $port Hostname Port
  256. * @param String $command Command to execute
  257. *
  258. * @return String
  259. */
  260. function telnet($server, $port, $command)
  261. {
  262. throw new Exception('PECL Memcached does not support telnet, use Server instead');
  263. }
  264. }