123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. /**
  3. * @link http://www.yiiframework.com/
  4. * @copyright Copyright (c) 2008 Yii Software LLC
  5. * @license http://www.yiiframework.com/license/
  6. */
  7. namespace yii\caching;
  8. /**
  9. * XCache provides XCache caching in terms of an application component.
  10. *
  11. * To use this application component, the [XCache PHP extension](http://xcache.lighttpd.net/) must be loaded.
  12. * Also note that the [[flush()]] functionality will work correctly only if "xcache.admin.enable_auth"
  13. * is set to "Off" in php.ini.
  14. *
  15. * See [[Cache]] for common cache operations that XCache supports.
  16. *
  17. * @author Qiang Xue <qiang.xue@gmail.com>
  18. * @since 2.0
  19. */
  20. class XCache extends Cache
  21. {
  22. /**
  23. * Checks whether a specified key exists in the cache.
  24. * This can be faster than getting the value from the cache if the data is big.
  25. * Note that this method does not check whether the dependency associated
  26. * with the cached data, if there is any, has changed. So a call to [[get]]
  27. * may return false while exists returns true.
  28. * @param mixed $key a key identifying the cached value. This can be a simple string or
  29. * a complex data structure consisting of factors representing the key.
  30. * @return boolean true if a value exists in cache, false if the value is not in the cache or expired.
  31. */
  32. public function exists($key)
  33. {
  34. $key = $this->buildKey($key);
  35. return xcache_isset($key);
  36. }
  37. /**
  38. * Retrieves a value from cache with a specified key.
  39. * This is the implementation of the method declared in the parent class.
  40. * @param string $key a unique key identifying the cached value
  41. * @return string|boolean the value stored in cache, false if the value is not in the cache or expired.
  42. */
  43. protected function getValue($key)
  44. {
  45. return xcache_isset($key) ? xcache_get($key) : false;
  46. }
  47. /**
  48. * Stores a value identified by a key in cache.
  49. * This is the implementation of the method declared in the parent class.
  50. *
  51. * @param string $key the key identifying the value to be cached
  52. * @param string $value the value to be cached
  53. * @param integer $duration the number of seconds in which the cached value will expire. 0 means never expire.
  54. * @return boolean true if the value is successfully stored into cache, false otherwise
  55. */
  56. protected function setValue($key, $value, $duration)
  57. {
  58. return xcache_set($key, $value, $duration);
  59. }
  60. /**
  61. * Stores a value identified by a key into cache if the cache does not contain this key.
  62. * This is the implementation of the method declared in the parent class.
  63. *
  64. * @param string $key the key identifying the value to be cached
  65. * @param string $value the value to be cached
  66. * @param integer $duration the number of seconds in which the cached value will expire. 0 means never expire.
  67. * @return boolean true if the value is successfully stored into cache, false otherwise
  68. */
  69. protected function addValue($key, $value, $duration)
  70. {
  71. return !xcache_isset($key) ? $this->setValue($key, $value, $duration) : false;
  72. }
  73. /**
  74. * Deletes a value with the specified key from cache
  75. * This is the implementation of the method declared in the parent class.
  76. * @param string $key the key of the value to be deleted
  77. * @return boolean if no error happens during deletion
  78. */
  79. protected function deleteValue($key)
  80. {
  81. return xcache_unset($key);
  82. }
  83. /**
  84. * Deletes all values from cache.
  85. * This is the implementation of the method declared in the parent class.
  86. * @return boolean whether the flush operation was successful.
  87. */
  88. protected function flushValues()
  89. {
  90. for ($i = 0, $max = xcache_count(XC_TYPE_VAR); $i < $max; $i++) {
  91. if (xcache_clear_cache(XC_TYPE_VAR, $i) === false) {
  92. return false;
  93. }
  94. }
  95. return true;
  96. }
  97. }