Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.10.x will end 8 November 2021 (12 months).
  • Bug fixes for security issues in 3.10.x will end 9 May 2022 (18 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.

Differences Between: [Versions 310 and 401] [Versions 310 and 402] [Versions 310 and 403]

   1  <?php
   2  
   3  /**
   4   * SimplePie Redis Cache Extension
   5   *
   6   * @package SimplePie
   7   * @author Jan Kozak <galvani78@gmail.com>
   8   * @link http://galvani.cz/
   9   * @license http://www.opensource.org/licenses/bsd-license.php BSD License
  10   * @version 0.2.9
  11   */
  12  
  13  
  14  /**
  15   * Caches data to redis
  16   *
  17   * Registered for URLs with the "redis" protocol
  18   *
  19   * For example, `redis://localhost:6379/?timeout=3600&prefix=sp_&dbIndex=0` will
  20   * connect to redis on `localhost` on port 6379. All tables will be
  21   * prefixed with `simple_primary-` and data will expire after 3600 seconds
  22   *
  23   * @package SimplePie
  24   * @subpackage Caching
  25   * @uses Redis
  26   */
  27  class SimplePie_Cache_Redis implements SimplePie_Cache_Base {
  28      /**
  29       * Redis instance
  30       *
  31       * @var \Redis
  32       */
  33      protected $cache;
  34  
  35      /**
  36       * Options
  37       *
  38       * @var array
  39       */
  40      protected $options;
  41  
  42      /**
  43       * Cache name
  44       *
  45       * @var string
  46       */
  47      protected $name;
  48  
  49      /**
  50       * Cache Data
  51       *
  52       * @var type
  53       */
  54      protected $data;
  55  
  56      /**
  57       * Create a new cache object
  58       *
  59       * @param string $location Location string (from SimplePie::$cache_location)
  60       * @param string $name Unique ID for the cache
  61       * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
  62       */
  63      public function __construct($location, $name, $options = null) {
  64          //$this->cache = \flow\simple\cache\Redis::getRedisClientInstance();
  65          $parsed = SimplePie_Cache::parse_URL($location);
  66          $redis = new Redis();
  67          $redis->connect($parsed['host'], $parsed['port']);
  68          if (isset($parsed['pass'])) {
  69              $redis->auth($parsed['pass']);
  70          }
  71          if (isset($parsed['path'])) {
  72              $redis->select((int)substr($parsed['path'], 1));
  73          }
  74          $this->cache = $redis;
  75  
  76          if (!is_null($options) && is_array($options)) {
  77              $this->options = $options;
  78          } else {
  79              $this->options = array (
  80                  'prefix' => 'rss:simple_primary:',
  81                  'expire' => 0,
  82              );
  83          }
  84  
  85          $this->name = $this->options['prefix'] . $name;
  86      }
  87  
  88      /**
  89       * @param \Redis $cache
  90       */
  91      public function setRedisClient(\Redis $cache) {
  92          $this->cache = $cache;
  93      }
  94  
  95      /**
  96       * Save data to the cache
  97       *
  98       * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
  99       * @return bool Successfulness
 100       */
 101      public function save($data) {
 102          if ($data instanceof SimplePie) {
 103              $data = $data->data;
 104          }
 105          $response = $this->cache->set($this->name, serialize($data));
 106          if ($this->options['expire']) {
 107              $this->cache->expire($this->name, $this->options['expire']);
 108          }
 109  
 110          return $response;
 111      }
 112  
 113      /**
 114       * Retrieve the data saved to the cache
 115       *
 116       * @return array Data for SimplePie::$data
 117       */
 118      public function load() {
 119          $data = $this->cache->get($this->name);
 120  
 121          if ($data !== false) {
 122              return unserialize($data);
 123          }
 124          return false;
 125      }
 126  
 127      /**
 128       * Retrieve the last modified time for the cache
 129       *
 130       * @return int Timestamp
 131       */
 132      public function mtime() {
 133  
 134          $data = $this->cache->get($this->name);
 135  
 136          if ($data !== false) {
 137              return time();
 138          }
 139  
 140          return false;
 141      }
 142  
 143      /**
 144       * Set the last modified time to the current time
 145       *
 146       * @return bool Success status
 147       */
 148      public function touch() {
 149  
 150          $data = $this->cache->get($this->name);
 151  
 152          if ($data !== false) {
 153              $return = $this->cache->set($this->name, $data);
 154              if ($this->options['expire']) {
 155                  return $this->cache->expire($this->name, $this->ttl);
 156              }
 157              return $return;
 158          }
 159  
 160          return false;
 161      }
 162  
 163      /**
 164       * Remove the cache
 165       *
 166       * @return bool Success status
 167       */
 168      public function unlink() {
 169          return $this->cache->set($this->name, null);
 170      }
 171  
 172  }