Redis.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <?php
  2. namespace ZN\Caching\Drivers;
  3. use ZN\Caching\CacheInterface;
  4. class RedisDriver 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. /* Redis Değişkeni
  15. *
  16. * Redis sınıfı bilgisini
  17. * barındırmak için oluşturulmuştur.
  18. *
  19. */
  20. protected $redis;
  21. /* Serialized Değişkeni
  22. *
  23. * Ön bellekleme bilgilerini
  24. * barındırmak için oluşturulmuştur.
  25. *
  26. */
  27. protected $serialized = [];
  28. public function __construct()
  29. {
  30. if( $this->isSupported() === false )
  31. {
  32. die(getErrorMessage('Cache', 'unsupported', 'Redis'));
  33. }
  34. }
  35. /******************************************************************************************
  36. * CONNECT *
  37. *******************************************************************************************
  38. | Genel Kullanım: Nesne tanımlaması ve ön bellek ayarları çalıştırılıyor. |
  39. | |
  40. ******************************************************************************************/
  41. public function connect($settings = [])
  42. {
  43. $config = \Config::get('Cache', 'driverSettings');
  44. $config = ! empty($settings)
  45. ? $settings
  46. : $config['redis'];
  47. $this->redis = new \Redis();
  48. try
  49. {
  50. if( $config['socketType'] === 'unix' )
  51. {
  52. $success = $this->redis->connect($config['socket']);
  53. }
  54. else
  55. {
  56. $success = $this->redis->connect($config['host'], $config['port'], $config['timeout']);
  57. }
  58. if ( empty($success) )
  59. {
  60. die(getErrorMessage('Cache', 'connectionRefused', 'Connection'));
  61. }
  62. }
  63. catch( RedisException $e )
  64. {
  65. die(getErrorMessage('Cache', 'connectionRefused', $e->getMessage()));
  66. }
  67. if( isset($config['password']) )
  68. {
  69. if ( ! $this->redis->auth($config['password']))
  70. {
  71. die(getErrorMessage('Cache', 'authenticationFailed'));
  72. }
  73. }
  74. $serialized = $this->redis->sMembers('ZNRedisSerialized');
  75. if ( ! empty($serialized) )
  76. {
  77. $this->serialized = array_flip($serialized);
  78. }
  79. return true;
  80. }
  81. /******************************************************************************************
  82. * SELECT *
  83. *******************************************************************************************
  84. | Genel Kullanım: Önbelleğe alınmış nesneyi çağırmak için kullanılır. |
  85. | |
  86. | Parametreler: Tek parametresi vardır. |
  87. | 1. string var @key => Nesne anahtarı. |
  88. | |
  89. | Örnek Kullanım: ->get('nesne'); |
  90. | |
  91. ******************************************************************************************/
  92. public function select($key = '')
  93. {
  94. $value = $this->redis->get($key);
  95. if( $value !== false && isset($this->serialized[$key]) )
  96. {
  97. return unserialize($value);
  98. }
  99. return $value;
  100. }
  101. /******************************************************************************************
  102. * INSERT *
  103. *******************************************************************************************
  104. | Genel Kullanım: Ön bellekte değişken saklamak için kullanılır. |
  105. | |
  106. | Parametreler: 4 parametresi vardır. |
  107. | 1. string var @key => Nesne anahtarı. |
  108. | 2. variable var @data => Nesne. |
  109. | 3. numeric var @time => Saklanacağı zaman. |
  110. | 4. mixed var @compressed => Sıkıştırma. |
  111. | |
  112. | Örnek Kullanım: ->get('nesne'); |
  113. | |
  114. ******************************************************************************************/
  115. public function insert($key = '', $data = '', $time = 60, $compressed = false)
  116. {
  117. if( is_array($data) OR is_object($data) )
  118. {
  119. if( ! $this->redis->sIsMember('ZNRedisSerialized', $key) && ! $this->redis->sAdd('ZNRedisSerialized', $key) )
  120. {
  121. return false;
  122. }
  123. if( ! isset($this->serialized[$key]) )
  124. {
  125. $this->serialized[$key] = true;
  126. }
  127. $data = serialize($data);
  128. }
  129. elseif( isset($this->serialized[$key]) )
  130. {
  131. $this->serialized[$key] = NULL;
  132. $this->redis->sRemove('ZNRedisSerialized', $key);
  133. }
  134. return $this->redis->set($key, $data, $time);
  135. }
  136. /******************************************************************************************
  137. * DELETE *
  138. *******************************************************************************************
  139. | Genel Kullanım: Ön bellekten nesneyi silmek için kullanılır. |
  140. | |
  141. | Parametreler: Tek parametresi vardır. |
  142. | 1. string var @key => Nesne anahtarı. |
  143. | |
  144. | Örnek Kullanım: ->delete('nesne'); |
  145. | |
  146. ******************************************************************************************/
  147. public function delete($key = '')
  148. {
  149. if( $this->redis->delete($key) !== 1 )
  150. {
  151. return false;
  152. }
  153. if( isset($this->serialized[$key]) )
  154. {
  155. $this->serialized[$key] = NULL;
  156. $this->redis->sRemove('ZNRedisSerialized', $key);
  157. }
  158. return true;
  159. }
  160. /******************************************************************************************
  161. * INCREMENT *
  162. *******************************************************************************************
  163. | Genel Kullanım: Nesnenin değerini artımak için kullanılır. |
  164. | |
  165. | Parametreler: 2 parametresi vardır. |
  166. | 1. string var @key => Nesne anahtarı. |
  167. | 2. numeric var @increment => Artırım miktarı. |
  168. | |
  169. | Örnek Kullanım: ->increment('nesne', 1); |
  170. | |
  171. ******************************************************************************************/
  172. public function increment($key = '', $increment = 1)
  173. {
  174. return $this->redis->incr($key, $increment);
  175. }
  176. /******************************************************************************************
  177. * DECREMENT *
  178. *******************************************************************************************
  179. | Genel Kullanım: Nesnenin değerini azaltmak için kullanılır. |
  180. | |
  181. | Parametreler: 2 parametresi vardır. |
  182. | 1. string var @key => Nesne anahtarı. |
  183. | 2. numeric var @decrement => Azaltım miktarı. |
  184. | |
  185. | Örnek Kullanım: ->decrement('nesne', 1); |
  186. | |
  187. ******************************************************************************************/
  188. public function decrement($key = '', $decrement = 1)
  189. {
  190. return $this->redis->decr($key, $decrement);
  191. }
  192. /******************************************************************************************
  193. * CLEAN *
  194. *******************************************************************************************
  195. | Genel Kullanım: Tüm önbelleği silmek için kullanılır. |
  196. | |
  197. ******************************************************************************************/
  198. public function clean()
  199. {
  200. return $this->redis->flushDB();
  201. }
  202. /******************************************************************************************
  203. * INFO *
  204. *******************************************************************************************
  205. | Genel Kullanım: Ön bellekleme hakkında bilgi edinmek için kullanılır. |
  206. | |
  207. | Parametreler: Tek parametresi vardır. |
  208. | 1. string var @type => Bilgi alınacak kullanıcı türü. |
  209. | |
  210. | Örnek Kullanım: ->info('user'); |
  211. | |
  212. ******************************************************************************************/
  213. public function info($type = NULL)
  214. {
  215. return $this->redis->info();
  216. }
  217. /******************************************************************************************
  218. * GET METADATA *
  219. *******************************************************************************************
  220. | Genel Kullanım: Ön bellekteki nesne hakkında bilgi almak için kullanılır. |
  221. | |
  222. | Parametreler: Tek parametresi vardır. |
  223. | 1. string var @key => Bilgi alınacak nesne. |
  224. | |
  225. | Örnek Kullanım: ->get_metadata('nesne'); |
  226. | |
  227. ******************************************************************************************/
  228. public function getMetaData($key = '')
  229. {
  230. $data = $this->select($key);
  231. if( $data !== false )
  232. {
  233. return array
  234. (
  235. 'expire' => time() + $this->redis->ttl($key),
  236. 'data' => $data
  237. );
  238. }
  239. return false;
  240. }
  241. /******************************************************************************************
  242. * IS SUPPORTED *
  243. *******************************************************************************************
  244. | Genel Kullanım: Sürücünün desteklenip desklenmediğini öğrenmek için kullanılır. |
  245. | |
  246. ******************************************************************************************/
  247. public function isSupported()
  248. {
  249. if( ! extension_loaded('redis') )
  250. {
  251. return \Errors::set('Cache', 'unsupported', 'Redis');
  252. }
  253. return $this->connect();
  254. }
  255. /******************************************************************************************
  256. * DESTRUCT *
  257. *******************************************************************************************
  258. | Genel Kullanım: Nesne tanımlaması kapatılıyor. |
  259. | |
  260. ******************************************************************************************/
  261. public function __destruct()
  262. {
  263. if( ! empty($this->redis) )
  264. {
  265. $this->redis->close();
  266. }
  267. }
  268. }