PHP+memcache安装使用例子
来源:互联网 发布:php iterator接口 编辑:程序博客网 时间:2024/05/01 22:02
memcached 是高效、快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序,以守护程序方式运
行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API
包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。PHP 等客户端在与 memcached 服务建立连接之后,接下来的
事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到
memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能
够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。
有两种方法可以使 PHP 作为 memcached 客户端,调用 memcached 的服务进行对象存取操作。 第一种,
PHP 有一个叫做 memcache 的扩展,在PHP中配置好拓展可以使用PHP提供的memcache函数来操作
memcache,Linux 下编译时需要带上 –enable-memcache[=DIR] 选项:
- #tar vxzf memcache-3.0.6.tgz
- #cd memcache-3.0.6
- #/usr/local/php/bin/phpize
- #./configure –enable-memcache –with-php-config=/usr/local/php/bin/php-config –with-zlib-dir
- #make
- #make install
Window 下则在 php.ini 中去掉 php_memcache.dll 前边的注释符,使其可用。 除此之外,还有一种方法,可
以避开扩展、重新编译所带来的麻烦,那就是直接使用memcached-client.zip。一般推荐使用第二种方式,只要
在PHP中includememcache-client.php就可以使用这个类提供的函数来操作mecache,虽然效率会比扩展库稍
差一些,但问题不大。windows下的php_memcache.dll在http://downloads.php.net/pierre/这里下载相应版本,
放入ext文件夹,然后在ini中开启即可。
windows下安装memcached服务:
详细过程移步这里:http://www.cnblogs.com/wucg/archive/2011/03/01/1968185.html
ubuntu下安装memcached 服务 :
sudo apt-get install memcached
运行memcached守护进程:
/usr/local/bin/memcached -d -m 100 -u root -l 127.0.0.1 -p 11211 -c 256 -P tmp/memcached.pid
参数说明:/usr/local/bin/memcached 是memcached编译后所在的地址 -d 是一个守护进程占用一个进程, -m 是
分配给memcached的内存,单位MB, -u 是启动memcached的用户, -l 是监听的服务器地址,这里可以设置多台
memcache服务器监听同一个IP作成集群, -p 是端口号,默认是11211,实际企业生产中建议修改, -c是运行时最大
的并发连接数,默认1024, -P是设置保存memcached的pid文件. 其他参数可以用memcached -h获得帮助
实例代码:
01
<?php
02
// 包含 memcached 类文件
03
require_once
(
'memcached-client.php'
);
04
// 选项设置
05
$options
=
array
(
06
'servers'
=>
array
(
'127.0.0.1:11211'
),
//memcached 服务的地址、端口,可用多个数组元素表示多个 memcached 服务
07
'debug'
=> true,
//是否打开 debug
08
'compress_threshold'
=> 10240,
//超过多少字节的数据时进行压缩
09
'persistant'
=> false
//是否使用持久连接
10
);
11
// 创建 memcached 对象实例
12
$mc
=
new
memcached(
$options
);
13
// 设置此脚本使用的唯一标识符
14
$key1
=
'mykey'
;
15
$key2
=
'mykey2'
;
16
// 往 memcached 中写入对象
17
$mc
->add(
$key1
,
'some random strings'
);
18
$mc
->add(
$key2
,
'some random strings2'
);
19
$val
=
$mc
->get(
$key1
);
20
$keys
=
array
(
21
'mykey'
,
22
'mykey2'
,
23
);
24
$val2
=
$mc
->get_multi(
$keys
);
//以数组中的键值获取一个数组的数据
25
//echo "n".str_pad('$mc->add() ', 60, '_')."n";
26
var_dump(
$val
);
27
echo
"get_multi:\r\n"
;
28
var_dump(
$val2
);
29
// 替换已写入的对象数据值
30
$mc
->replace(
$key1
,
array
(
'some'
=>
'haha'
,
'array'
=>
'xxx'
));
31
$val
=
$mc
->get(
$key1
);
32
//echo "n".str_pad('$mc->replace() ', 60, '_')."n";
33
var_dump(
$val
);
34
// 删除 memcached 中的对象
35
$mc
->
delete
(
$key1
);
36
$val
=
$mc
->get(
$key1
);
37
//echo "n".str_pad('$mc->delete() ', 60, '_')."n";
38
var_dump(
$val
);
39
?>
在实际应用中,通常会把数据库查询的结果集保存到 memcached 中,下次访问时直接从 memcached 中获取,而不再做数据库查询操作,这样可以在很大程度上减轻数据库的负担。通常会将 SQL 语句 md5() 之后的值作为唯一标识符 key。下边是一个利用 memcached 来缓存数据库查询结果集的示例(此代码片段紧接上边的示例代码):
1
01
<?php
02
$sql
=
'SELECT * FROM users'
;
03
$key
= md5(
$sql
);
//memcached 对象标识符
04
{
05
// 在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。
06
echo
"n"
.
str_pad
(
'Read datas from MySQL.'
, 60,
'_'
).
"n"
;
07
$conn
= mysql_connect(
'localhost'
,
'test'
,
'test'
);
08
mysql_select_db(
'test'
);
09
$result
= mysql_query(
$sql
);
10
while
(
$row
= mysql_fetch_object(
$result
))
11
$datas
[] =
$row
;
12
// 将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。
13
$mc
->add(
$key
,
$datas
);
14
{
15
echo
"n"
.
str_pad
(
'Read datas from memcached.'
, 60,
'_'
).
"n"
;
16
}
17
var_dump(
$datas
);
18
?>
Memcache还可以用来存储session: 将php.ini中改为:
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
使用多个 memcached server 时用逗号","隔开,并且和 Memcache::addServer() 文档中说明的一样,
可以带额外的参数"persistent"、"weight"、"timeout"、"retry_interval" 等等,类似这样的:
"tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2" 。
<?phpsession_start();$_SESSION["UserID"]=123;echo session_id();?>
用 sessionid 去 memcached 里查询一下:
<?php$memcache = memcache_connect('localhost', 11211);var_dump($memcache->get('19216821213cxycedec65b0883238c278eeb573e077'));?>
用 memcache 来存储 session 在读写速度上会比 files 时快很多,而且在多个服务器需要共用 session
时会比较方便,将这些服务器都配置成使用同一组 memcached 服务器就可以,减少了额外的工作量。
缺点是 session 数据都保存在 memory 中,持久化方面有所欠缺。
- PHP+memcache安装使用例子
- memcache在ThinkPHP中的使用1---PHP下安装memcache
- php-memcache 的安装以及简单使用
- memcached php-memcache 的安装及使用
- memcached、php-memcache安装及使用
- memcache使用例子
- 安装 PHP Memcache 扩展
- php 安装 memcache 扩张
- php安装memcache扩展
- php安装memcache扩展
- PHP安装memcache
- php安装memcache扩展
- php安装memcache扩展
- PHP memcache扩展安装
- php使用memcache
- php 操作 memcache 使用
- PHP-Memcache 使用范例
- PHP memcache使用
- NSPredicate的用法
- case用法
- Android地图开发:自定义地图弹出框内容
- linux的文件系统及Inode详解
- MyBatis 3中实现一对多的插入和查询
- PHP+memcache安装使用例子
- MYSQL笔记120410
- .net发展历程~
- 下面一段代码竟然引起反复打开的时候IE进程挂起
- sizeof用法汇总(经典)
- Objective-C简介
- 微软笔试和面试题(技术类)
- frameset 实现无刷新聊天室技术实现方法
- 用筛法求之N内的素数