public function getSet($key, callable $value, $partition = null, $time = 14400)
    {
        $temp = $this->get($key, null, $partition);
        if ($temp !== null) {
            return $temp;
        }
        $this->prepare($key, $partition);
        try {
            $value = call_user_func($value);
            return $this->set($key, $value, $partition, $time);
        } catch (CacheException $e) {
            return $value;
        } catch (\Exception $e) {
            $this->delete($key, $partition);
            throw $e;
        }
    }