Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16985 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
16766 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Cache;
6
 
16985 efrain 7
 
16766 efrain 8
class CacheImpl implements CacheInterface
9
{
10
 
11
    /**
17002 efrain 12
     *
13
     * @var \LeadersLinked\Cache\CacheInterface
14
     */
15
    private static $_instance;
16
 
17
 
18
    /**
19
     *
20
     * @var \Memcached
21
     */
22
    private $cache;
23
 
24
    /**
25
     *
26
     * @var int
27
     */
28
    private $ttl;
29
 
30
 
31
    /**
16766 efrain 32
     *
33
     * @param Array $config
34
     */
17002 efrain 35
    private function __construct($config)
16766 efrain 36
    {
17002 efrain 37
 
38
         $this->ttl         = intval($config['leaderslinked.memcache.ttl'], 10);
39
         $host              = strval($config['leaderslinked.memcache.host']);
40
         $port              = intval($config['leaderslinked.memcache.port'], 10);
41
 
42
 
43
         $this->cache = new \Memcached();
44
         $this->cache->addserver($host, $port);
45
 
16766 efrain 46
 
47
 
48
    }
49
 
50
    /**
51
     *
17002 efrain 52
     * @param array $config
53
     * @return \LeadersLinked\Cache\CacheInterface
16766 efrain 54
     */
17002 efrain 55
    public static function getInstance($config)
16766 efrain 56
    {
17002 efrain 57
        if(self::$_instance == null) {
58
            self::$_instance = new CacheImpl($config);
16785 efrain 59
        }
17002 efrain 60
        return self::$_instance;
16766 efrain 61
    }
62
 
63
    /**
17002 efrain 64
     *
16766 efrain 65
     * @param string $key
17002 efrain 66
     * @param mixed $value
16766 efrain 67
     */
17002 efrain 68
    public function setItem($key, $value)
16766 efrain 69
    {
17002 efrain 70
 
71
        if($this->cache->checkKey($key)) {
72
 
73
            $this->cache->replace($key, serialize($value), $this->ttl);
16785 efrain 74
        } else {
17002 efrain 75
            $this->cache->add($key, serialize($value), $this->ttl);
16785 efrain 76
        }
17002 efrain 77
 
78
 
16766 efrain 79
    }
80
 
17002 efrain 81
 
16766 efrain 82
 
83
    /**
84
     *
85
     * @param string $key
86
     * @return boolean
87
     */
16768 efrain 88
    public function removeItem($key)
16766 efrain 89
    {
17002 efrain 90
        if($this->cache->checkKey($key)) {
91
            return $this->cache->delete($key);
16785 efrain 92
        } else {
16985 efrain 93
            return true;
16785 efrain 94
        }
17002 efrain 95
    }
16766 efrain 96
 
97
 
16768 efrain 98
 
16985 efrain 99
 
17002 efrain 100
 
16766 efrain 101
    /**
102
     *
103
     * @param string $key
16768 efrain 104
     * @return boolean
105
     */
106
    public function hasItem($key)
107
    {
17002 efrain 108
        return $this->cache->checkKey($key);
109
 
16768 efrain 110
    }
111
 
112
 
113
    /**
114
     *
115
     * @param string $key
16766 efrain 116
     * @return mixed
117
     */
16768 efrain 118
    public function getItem($key)
16766 efrain 119
    {
17002 efrain 120
        if($this->cache->checkKey($key)) {
121
            $value = $this->cache->get($key);
122
            if(is_string($value)) {
123
                return unserialize($value);
124
            } else {
125
                return $value;
126
            }
16766 efrain 127
        } else {
16985 efrain 128
            return null;
16766 efrain 129
        }
17002 efrain 130
 
16766 efrain 131
    }
16785 efrain 132
 
16766 efrain 133
 
17002 efrain 134
 
16766 efrain 135
}
136
 
137
 
138