Include update date in atom feed regardless of the number of entries
[gitphp.git] / include / cache / Cache_Memcache.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
/**
 * Cache strategy using Memcache extension
 *
 * @author Christopher Han <xiphux@gmail.com>
 * @copyright Copyright (c) 2012 Christopher Han
 * @package GitPHP
 * @subpackage Cache
 */
class GitPHP_Cache_Memcache implements GitPHP_CacheStrategy_Interface
{
 
        /**
         * Memcache object
         *
         * @var Memcached
         */
        protected $memcache;
 
        /**
         * Constructor
         *
         * @param array[] $servers server array
         */
        public function __construct($servers)
        {
                if (!class_exists('Memcache'))
                        throw new Exception('Memcache extension not found');
 
                if ((!$servers) || (!is_array($servers)) || (count($servers) < 1)) {
                        throw new GitPHP_MessageException('No Memcache servers defined', true, 500);
                }
 
                $this->memcache = new Memcache();
 
                foreach ($servers as $server) {
                        if (is_array($server)) {
                                $host = $server[0];
                                $port = 11211;
                                if (isset($server[1]))
                                        $port = $server[1];
                                $weight = 1;
                                if (isset($server[2]))
                                        $weight = $server[2];
                                $this->memcache->addServer($host, $port, true, $weight);
                        }
                }
        }
 
        /**
         * Gets an item from the cache
         *
         * @param string $key cache key
         * @return mixed cached object or false if not found
         */
        public function Get($key)
        {
                if (empty($key))
                        return false;
 
                return $this->memcache->get($key);
        }
 
        /**
         * Sets an item into the cache
         *
         * @param string $key cache key
         * @param mixed $value object to cache
         * @param int $lifetime cached object lifetime
         */
        public function Set($key, $value, $lifetime)
        {
                if (empty($key) || empty($value))
                        return;
 
                $this->memcache->set($key, $value, false, time() + $lifetime);
        }
 
        /**
         * Check if an item exists
         *
         * @param string $key cache key
         * @return boolean true if exists
         */
        public function Exists($key)
        {
                return ($this->Get($key) !== false);
        }
 
        /**
         * Delete an item from the cache
         *
         * @param string $key cache key
         */
        public function Delete($key)
        {
                if (empty($key))
                        return;
 
                $this->memcache->delete($key);
        }
 
        /**
         * Clear the cache
         */
        public function Clear()
        {
                $this->memcache->flush();
        }
 
}
 
comments