<?php
namespace Cache;
class Redis {
	private $expire;
	private $cache;

	public function __construct($expire) {
		$this->expire = $expire;

		$this->cache = new \Redis();
		$this->cache->pconnect(CACHE_HOSTNAME, CACHE_PORT);
	}

	public function get($key) {
		$data = $this->cache->get(CACHE_PREFIX . $key);

		return json_decode($data, true);
	}

    public function setExpire($expire = 3600){
        $this->expire=$expire;
        return $this;
    }

	public function set($key, $value) {
		$status = $this->cache->set(CACHE_PREFIX . $key, json_encode($value));

		if ($status) {
			$this->cache->expire(CACHE_PREFIX . $key, $this->expire);
		}

		return $status;
	}

	public function delete($key) {
		$this->cache->del(CACHE_PREFIX . $key);
	}

    public function deleteLike($key) {
        $pre = CACHE_PREFIX.$key;
        // Have scan retry
        $this->cache->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY);
        $it = NULL;
        while ($arr_keys = $this->cache->scan($it, "$pre*", 10)) {
            foreach ($arr_keys as $key){
                $this->delete($key);
            }
        }
    }
}