-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
mfwMemcache.php
137 lines (121 loc) · 2.5 KB
/
mfwMemcache.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?php
/*!@file
* Memcached wrapper.
*/
/**
* Memcache wrapper class.
* アプリ固有のprefixをキーに透過的に付加する.
* @see mfwServerEnv::cachePrefix()
*/
class mfwMemcache {
const URL_EXPIRE = 86400; ///< link_idの有効時間
protected static $mc = null;
/**
* memcacheサーバに接続.
* @return Memcache object.
*/
protected static function connect()
{
if(is_null(self::$mc)){
$conf = mfwServerEnv::memcache();
if(!$conf){
throw new Exception('memcache server undefined');
}
$mc = new Memcached();
if($mc->addServer($conf['host'],$conf['port'])){
self::$mc = $mc;
}
else{
error_log("cannot connect memcached ({$conf['host']}:{$conf['port']})");
}
}
return self::$mc;
}
/**
* 明示的に接続を破棄.
*/
public static function disconnect()
{
if(self::$mc){
self::$mc->close();
self::$mc = null;
}
}
/**
* prefixを付加したキーを生成.
*/
protected static function makeKey($key)
{
$prefix = mfwServerEnv::cachePrefix();
return "{$prefix}{$key}";
}
/**
* Memcacheへ保存.
* @param string $key 保存するキー
* @param mixed $value 値
* @param integer $expire 有効期限 (seconds)
* @return 成功したらtrue
*/
public static function set($key, $value, $expire=600)
{
$mc = static::connect();
return $mc->set(static::makeKey($key),$value,$expire);
}
/**
* Memcacheから取得
* @param string $key 取得するキー
* @return 保存されていた値
*/
public static function get($key)
{
$mc = static::connect();
return $mc->get(static::makeKey($key));
}
/**
* Memcacheから削除.
* @param string $key 削除するキー
* @return 成功したらtrue
*/
public static function delete($key)
{
$mc = static::connect();
return $mc->delete(static::makeKey($key),0);
}
/**
* 全削除.
* @return 成功したらtrue
*/
public static function flush()
{
$mc = static::connect();
return $mc->flush();
}
/*!
* @name link_id
* @{
*/
/**
* URLを格納してハッシュ(link_id)を返す.
* @param string $url 格納するURL.
* @return ハッシュ.
*/
public static function storeURL($url)
{
$hash = sha1($url);
static::set("URL_{$hash}",$url,self::URL_EXPIRE);
return $hash;
}
/**
* ハッシュ(link_id)からURLを取り出す
* @param string $hash ハッシュ(link_id)
* @return URL.
*/
public static function fetchURL($hash)
{
if($hash){
return static::get("URL_{$hash}");
}
return false;
}
/*!@}*/
}