Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16769 | 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
 
7
class CacheImpl implements CacheInterface
8
{
16785 efrain 9
    /**
10
     *
11
     * @var \Memcached|\Memcache
12
     */
16766 efrain 13
    private $memcached;
16769 efrain 14
 
16766 efrain 15
 
16
 
17
    /**
18
     *
19
     * @var int
20
     */
21
    private $ttl;
22
 
23
 
24
    /**
25
     *
26
     * @var string
27
     */
28
    private $host;
29
 
30
 
31
    /**
32
     *
33
     * @var int
34
     */
35
    private $port;
36
 
37
 
16785 efrain 38
 
39
 
16766 efrain 40
    /**
41
     *
42
     * @param Array $config
43
     */
16769 efrain 44
    public function __construct($config)
16766 efrain 45
    {
46
        $this->ttl    = intval($config['leaderslinked.memcache.ttl'], 10);
47
        $this->host   = strval($config['leaderslinked.memcache.host']);
48
        $this->port   = intval($config['leaderslinked.memcache.port'], 10);
49
 
50
 
51
        if(class_exists(\Memcached::class)) {
52
            $this->memcached = new \Memcached();
53
            $this->memcached->addServer($this->host, $this->port);
54
        } else  if(class_exists(\Memcache::class)) {
16785 efrain 55
            $this->memcached = new \Memcache();
56
            $this->memcached->addserver($this->host, $this->port);
16766 efrain 57
        }
58
 
16785 efrain 59
 
16766 efrain 60
    }
61
 
62
    /**
63
     *
64
     * @param string $key
65
     * @param mixed $value
66
     */
16768 efrain 67
    public function setItem($key, $value)
16766 efrain 68
    {
16785 efrain 69
        if($this->memcached) {
70
            $this->memcached->add($key, $value, $this->ttl);
71
        } else {
72
            $filename = $this->getFilename($key);
73
            return file_put_contents($filename, serialize($value));
74
        }
16766 efrain 75
    }
76
 
77
    /**
78
     *
79
     * @param string $key
80
     * @return boolean
81
     */
82
    public function touch($key)
83
    {
16785 efrain 84
        if($this->memcached) {
85
            return $this->memcached->touch($key, $this->ttl);
86
        } else {
87
            $filename = $this->getFilename($key);
88
            if(file_exists($filename)) {
89
                return touch($filename);
90
            } else {
91
                return true;
92
            }
93
        }
16766 efrain 94
    }
95
 
96
 
97
    /**
98
     *
99
     * @param string $key
100
     * @return boolean
101
     */
16768 efrain 102
    public function removeItem($key)
16766 efrain 103
    {
16785 efrain 104
        if($this->memcached) {
105
            return $this->memcached->delete($key);
106
        } else {
107
            $filename = $this->getFilename($key);
108
            if(file_exists($filename)) {
109
                return unlink($filename);
110
            } else {
111
                return true;
112
            }
113
        }
114
    }
16766 efrain 115
 
116
 
16768 efrain 117
 
16766 efrain 118
    /**
119
     *
120
     * @param string $key
16768 efrain 121
     * @return boolean
122
     */
123
    public function hasItem($key)
124
    {
16785 efrain 125
        if($this->memcached) {
126
 
127
            $value = $this->memcached->get($key);
128
            if($value === \Memcached::RES_NOTFOUND) {
129
                return false;
130
            } else {
131
                return empty($value) ? false : true;
132
            }
16768 efrain 133
        } else {
16785 efrain 134
            $filename = $this->getFilename($key);
135
            return file_exists($filename);
16768 efrain 136
        }
16785 efrain 137
 
16768 efrain 138
    }
139
 
140
 
141
    /**
142
     *
143
     * @param string $key
16766 efrain 144
     * @return mixed
145
     */
16768 efrain 146
    public function getItem($key)
16766 efrain 147
    {
16785 efrain 148
        if($this->memcached) {
149
 
150
            $value = $this->memcached->get($key);
151
            if($value === \Memcached::RES_NOTFOUND) {
152
                return false;
153
            } else {
154
                return $value;
155
            }
16766 efrain 156
        } else {
16785 efrain 157
            $filename = $this->getFilename($key);
158
            if(file_exists($filename)) {
159
                return unserialize(file_get_contents($filename));
160
            } else {
161
                return null;
162
            }
163
 
164
 
16766 efrain 165
        }
166
    }
16785 efrain 167
 
168
    /**
169
     *
170
     * @param string $key
171
     * @return string
172
     */
173
    private function getFilename($key)
174
    {
175
        $filepath = 'data' . DIRECTORY_SEPARATOR . 'cache';
176
        if(!file_exists($filepath)) {
177
            @mkdir($filepath, 0755);
178
        }
179
 
180
        return $filepath . DIRECTORY_SEPARATOR . $key . '.json';
181
    }
16766 efrain 182
 
183
}
184
 
185
 
186