]> git.mxchange.org Git - friendica.git/blob - src/Core/Cache/DatabaseCacheDriver.php
17ae310074b36a3c9cbd05370706d23e749f9935
[friendica.git] / src / Core / Cache / DatabaseCacheDriver.php
1 <?php\r
2 \r
3 namespace Friendica\Core\Cache;\r
4 \r
5 use dba;\r
6 use Friendica\Core\Cache;\r
7 use Friendica\Database\DBM;\r
8 use Friendica\Util\DateTimeFormat;\r
9 \r
10 /**\r
11  * Database Cache Driver\r
12  *\r
13  * @author Hypolite Petovan <mrpetovan@gmail.com>\r
14  */\r
15 class DatabaseCacheDriver implements ICacheDriver\r
16 {\r
17         public function get($key)\r
18         {\r
19                 $cache = dba::selectFirst('cache', ['v'], ['`k` = ? AND `expires` >= ?', $key, DateTimeFormat::utcNow()]);\r
20 \r
21                 if (DBM::is_result($cache)) {\r
22                         $cached = $cache['v'];\r
23                         $value = @unserialize($cached);\r
24 \r
25                         // Only return a value if the serialized value is valid.\r
26                         // We also check if the db entry is a serialized\r
27                         // boolean 'false' value (which we want to return).\r
28                         if ($cached === serialize(false) || $value !== false) {\r
29                                 return $value;\r
30                         }\r
31                 }\r
32 \r
33                 return null;\r
34         }\r
35 \r
36         public function set($key, $value, $duration = Cache::MONTH)\r
37         {\r
38                 $fields = [\r
39                         'v'       => serialize($value),\r
40                         'expires' => DateTimeFormat::utc('now + ' . $duration . ' seconds'),\r
41                         'updated' => DateTimeFormat::utcNow()\r
42                 ];\r
43 \r
44                 return dba::update('cache', $fields, ['k' => $key], true);\r
45         }\r
46 \r
47         public function delete($key)\r
48         {\r
49                 return dba::delete('cache', ['k' => $key]);\r
50         }\r
51 \r
52         public function clear()\r
53         {\r
54                 return dba::delete('cache', ['`expires` < NOW()']);\r
55         }\r
56 }\r