Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17002 | | 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
    /**
17018 efrain 12
     *
17002 efrain 13
     * @var \LeadersLinked\Cache\CacheInterface
14
     */
15
    private static $_instance;
16
 
17
 
18
    /**
17018 efrain 19
     *
17002 efrain 20
     * @var \Memcached
21
     */
22
    private $cache;
23
 
17018 efrain 24
 
17002 efrain 25
    /**
17018 efrain 26
     *
27
     * @var string
28
     */
29
    private $namespace;
30
 
31
    /**
32
     *
17002 efrain 33
     * @var int
34
     */
35
    private $ttl;
36
 
17018 efrain 37
 
17002 efrain 38
    /**
16766 efrain 39
     *
40
     * @param Array $config
41
     */
17002 efrain 42
    private function __construct($config)
16766 efrain 43
    {
17018 efrain 44
 
17002 efrain 45
 
17018 efrain 46
        $this->ttl          = intval($config['leaderslinked.memcache.ttl'], 10);
47
        $this->namespace    = strval($config['leaderslinked.memcache.namespace']);
48
        $host               = strval($config['leaderslinked.memcache.host']);
49
        $port               = intval($config['leaderslinked.memcache.port'], 10);
16766 efrain 50
 
51
 
17018 efrain 52
        $this->cache = new \Memcached();
53
        $this->cache->addserver($host, $port);
54
 
55
 
56
 
16766 efrain 57
    }
58
 
59
    /**
17018 efrain 60
     *
17002 efrain 61
     * @param array $config
62
     * @return \LeadersLinked\Cache\CacheInterface
16766 efrain 63
     */
17002 efrain 64
    public static function getInstance($config)
16766 efrain 65
    {
17002 efrain 66
        if(self::$_instance == null) {
67
            self::$_instance = new CacheImpl($config);
16785 efrain 68
        }
17002 efrain 69
        return self::$_instance;
16766 efrain 70
    }
71
 
17018 efrain 72
 
16766 efrain 73
    /**
17002 efrain 74
     *
16766 efrain 75
     * @param string $key
17002 efrain 76
     * @param mixed $value
17018 efrain 77
     * @param int $ttl
16766 efrain 78
     */
17018 efrain 79
    public function setItem($key, $value, $ttl = 0)
16766 efrain 80
    {
17018 efrain 81
        $ttl = $ttl ? $ttl : $this->ttl;
82
        $key = $this->namespace ? $this->namespace . '-' . $key : $key;
17002 efrain 83
 
17018 efrain 84
        if($this->hasItem($key)) {
17002 efrain 85
 
17018 efrain 86
            $this->cache->replace($key, serialize($value), time() + $ttl);
16785 efrain 87
        } else {
17018 efrain 88
            $this->cache->add($key, serialize($value), time() + $ttl);
16785 efrain 89
        }
16766 efrain 90
    }
17018 efrain 91
 
16766 efrain 92
    /**
93
     *
94
     * @param string $key
95
     * @return boolean
96
     */
16768 efrain 97
    public function removeItem($key)
16766 efrain 98
    {
17018 efrain 99
        if($this->hasItem($key)) {
100
            $key = $this->namespace ? $this->namespace . '-' . $key : $key;
101
 
17002 efrain 102
            return $this->cache->delete($key);
16785 efrain 103
        } else {
16985 efrain 104
            return true;
16785 efrain 105
        }
17002 efrain 106
    }
16766 efrain 107
 
108
    /**
109
     *
17018 efrain 110
     * {@inheritDoc}
111
     * @see \LeadersLinked\Cache\CacheInterface::getAll()
16768 efrain 112
     */
17018 efrain 113
    public function getAll()
114
    {
115
        return $this->cache->fetchAll();
116
    }
117
 
118
    /**
119
     *
120
     * {@inheritDoc}
121
     * @see \LeadersLinked\Cache\CacheInterface::hasItem()
122
     */
16768 efrain 123
    public function hasItem($key)
124
    {
17018 efrain 125
        $key = $this->namespace ? $this->namespace . '-' . $key : $key;
17002 efrain 126
 
17018 efrain 127
        $keys = $this->cache->getAllKeys();
128
        if ($keys === false) {
129
            return false;
130
        }
131
        return in_array($key, $keys, true);
16768 efrain 132
    }
17018 efrain 133
 
16768 efrain 134
    /**
17018 efrain 135
     *
136
     * {@inheritDoc}
137
     * @see \LeadersLinked\Cache\CacheInterface::getItem()
16766 efrain 138
     */
16768 efrain 139
    public function getItem($key)
16766 efrain 140
    {
17018 efrain 141
        if($this->hasItem($key)) {
142
            $key = $this->namespace ? $this->namespace . '-' . $key : $key;
143
 
17002 efrain 144
            $value = $this->cache->get($key);
145
            if(is_string($value)) {
146
                return unserialize($value);
147
            } else {
148
                return $value;
149
            }
16766 efrain 150
        } else {
16985 efrain 151
            return null;
16766 efrain 152
        }
153
    }
16785 efrain 154
 
17018 efrain 155
}
16766 efrain 156
 
17002 efrain 157
 
16766 efrain 158
 
159