上一篇说明telnet操作memcache时就提到有两中方式来操作memcache,一种是通过telnet工具,另一种是通过程序控制,下面简单总结下关于使用PHP程序来操作memcache步骤以及细节注意事项。
首先,准备工作是要先把php_memcache.dll扩展文件加载到php中,以下是简要步骤:
将php_memcache.dll文件拷贝到php的ext目录下。
修改php.ini文件,加载php_memcache.dll文件,添加extension=php_memcache.dll,注意前面不要有;号。
重新启动apache服务器
注意:
不同版本的php所使用的php_memcache.dll文件是不一样的,加载时要注意检查php版本,找到合适的php_memcache.dll文件,否则会出错。
然后,需要启动memcache服务,在cmd控制台,输入以下命令启动memcache服务:
1
2
3
|
memcache.exe -d start
或者
memcache.exe -p port
|
下面是一个PHP程序写的操作memcache服务的事例代码:
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
|
<?php
/*
* PHP程序操作memcache服务的事例代码
* */
//实例化memcache对象
$mem = new Memcache;
//建立链接
if (!$mem->connect('127.0.0.1', 11211)) {
exit('与memcache服务建立链接失败');
}
//查看memcache版本
echo '服务器版本信息:' . $mem->getVersion() . '<br />';
//准备测试数据
$str = 'PHP is my love';
$num = 123456;
$bool = true;
$arr = array('PHP is my love', 123, array('Hanson', 'Liyaf'));
Class Dog {
Public $name = '';
Public function __construct ($name) {
$this->name = $name;
}
}
$dog = new Dog('lucky_dog');
//添加数据到memcache
$res = $mem->add('s', $str, MEMCACHE_COMPRESSED, 120) && $mem->add('n', $num, MEMCACHE_COMPRESSED, 120) && $mem->add('b', $bool, MEMCACHE_COMPRESSED, 120) && $mem->add('a', $arr, MEMCACHE_COMPRESSED, 120) && $mem->add('o', $dog, MEMCACHE_COMPRESSED, 120);
if (!$res) {
echo '添加失败';
die;
} else {
echo '添加成功';
}
//关闭链接
$mem->close();
?>
|
从内存中查询数据:
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
|
<?php
/*
* 获取数据
* */
$m = new Memcache;
$m->connect('localhost', 11211);
//取出数据
//string
$str = $m->get('s');
//number
$num = $m->get('n');
//bool
$bool = $m->get('b');
//array
$arr = $m->get('a');
//object
$obj = $m->get('o');
//print
echo '字符串' . $str . '<br />';
echo '数值' . $num . '<br />';
echo 'bool值' . $bool . '<br />';
echo '数组' . print_r($arr) . '<br />';
echo '对象' . var_dump($obj) . '<br />';
//关闭链接
$m->close();
?>
|
细节:
当我们在添加数据时,使用函数:
1
|
bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )
|
如果$expire设置为0,表示永不过期,只要mem不重新启动,就一直在内存中
如果$expire设置为秒数,则最大是30243600
如果$expire希望保持时间超过30天,则可以使用时间戳:time()+天数243600
(end)
以下为补充内容
memcache生命周期
从数据放入memcache开始计时,直到时间到时就销毁,如果时间设置为0,则表示永不过期。
memcache数据被销毁的情况如下:
- 设置时间到。
- 重启memcache服务
- 重启memcache服务所在机器
- delete删除或者flush销毁数据
将session数据放入memcache服务中
修改php.ini配置文件
设置session.save_handler=memcache (可设置为files/user/memcache)
session.save_path=”tcp://127.0.0.0.1:端口”
重启apache服务器
正常使用$_SESSION超全局数组
思考
假如,不允许我们修改php.ini文件,我们可以通过ini_set()函数来处理session写入memcache这个功能。
代码:
1
2
3
4
5
6
|
<?php
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.0.1:端口");
//操作session代码
?>
|
我们也可以通过ini_set()函数去动态的修改php.ini的其他设置,但不影响其他php页面,也不会去修改php.ini文件本身。