PHP环境下Memcache的使用方法

简介: 原文:PHP环境下Memcache的使用方法 原文地址:http://www.2cto.com/kf/201503/384967.html 如今互联网崛起的时代,各大网站都面临着一个大数据流问题,怎么提高网站访问速度,减少对数据库的操作;作为PHP开发人员,我们一般能想到的方法有页...
原文: PHP环境下Memcache的使用方法

原文地址:http://www.2cto.com/kf/201503/384967.html

如今互联网崛起的时代,各大网站都面临着一个大数据流问题,怎么提高网站访问速度,减少对数据库的操作;作为PHP开发人员,我们一般能想到的方法有页面静态化处理、防盗链、CDN内容分发加速访问、mysql数据库优化建立索引、架设apache服务器集群()、还有就是现在流行的各种分布式缓存技术:如memcached/redis;

 

1.什么是Memcached?

a.Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

b.Memcached的键key一般是字符串,该值不能重复;value可以放入字符串、数组、数值、对象、布尔,二进制数据和图片视频

c.Memcached默认服务端口是11211

2.PHP使用Memcached步骤

<1>准备:下载Memcached服务安装包:memcached-1.2.6-win32-bin.7z和访问Memcached服务的dll库:php_memcache.dll

www.memcached.org(官网进不去好像,可以从其他地方下载)

<2>解压包memcached-1.2.6-win32-bin.7z(可以解压完复制放到web服务器同级目录),然后操作cmd,进入到刚才解压的目录用命令安装:memcached.exe -d install

<3>安装完(判断是否安装完毕可以到服务列表里面查看是否有memcached服务),然后cmd用命令启动:memcached.exe -d start

具体操作如下:

\

 

<4>启动完memcached服务后,再把下载的php_memcache.dll放到web服务器php5目录下的ext目录下

\

<5>在php.ini里面修改,加载扩展库php_memcache.dll,然后重启apache服务器

\

<6>开始实践,memcached主要有crud操作(即创建、读取、更新、删除值操作,具体可以查阅手册),下面弄个简单的设置值,然后读取值的操作

a.设置值页面

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!--?php
header( "Content-type:text/html;charset=utf-8" );
//创建Memcache对象
$mem = new Memcache(); 
//连接Memcache服务器
if (!$mem--->connect( "127.0.0.1" )) {
     echo "连接Memcache服务器失败!" ;
}
 
//设置,'myword'参数代表键key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒
if ($mem->set( 'myword' , 'hello world' ,MEMCACHE_COMPRESSED, 50 ))
{
     echo "设置值成功!" ;
}
 
?>

 

 

注:如果值在内存存放的时间要超过30天,要用时间戳来设置100天:如time()+3600*24*100;设置0则表示永不过期


b.读取值页面

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--?php
header( "Content-type:text/html;charset=utf-8" );
$mem = new Memcache(); 
if (!$mem--->connect( "127.0.0.1" )) {
     echo "连接Memcache服务器失败!" ;
}
 
//读取键myword值
$value = $mem->get( 'myword' );
if (!$value)
{
     echo "读取失败!" ;
}
else
{
     echo "读取的值=" .$value;
}

c.删除、更新例子:

 

 

?
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
<!--?php
header( "Content-type:text/html;charset=utf-8" );
//创建Memcache对象
$mem = new Memcache(); 
//连接Memcache服务器
if (!$mem--->connect( "127.0.0.1" )) {
     echo "连接Memcache服务器失败!" ;
}
 
//设置,'myword'参数代表键key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒
if ($mem->set( 'myword' , 'hello world' ,MEMCACHE_COMPRESSED, 50 ))
{
     echo "设置值成功!" ;
}
 
//读取键myword值
$value = $mem->get( 'myword' );
if (!$value)
{
     echo "读取失败!" ;
}
else
{
     echo "读取的值=" .$value;
}
 
//更新键值
$mem->replace( 'myword' , 'hello everybody!' );
 
$value = $mem->get( 'myword' );
if (!$value)
{
     echo "读取失败!" ;
}
else
{
     echo "读取的值=" .$value;
}
 
//删除键myword值
$mem->delete( 'myword' );
 
$value = $mem->get( 'myword' );
if (!$value)
{
     echo "读取失败!" ;
}
else
{
     echo "读取的值=" .$value;
}
 
//关闭
$mem->close(); 
 
 
 
?>

注:mem对象下还有许多方法,可以通过翻阅手册了解。

 

<7>多个memcached服务器设置,其实就比一个memcached服务器改变一点点,就是把多个memcached的服务器通过方法addserver添加到连接池中,这样设置完后,crud操作时,内部就会通过相应算法均衡连接相应服务器并执行相应操作中。

 

?
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
<!--?php
header( "Content-type:text/html;charset=utf-8" );
//创建Memcache对象
$mem = new Memcache();
//添加多台memcached服务器
$mem--->addserver( '192.168.0.1' , 11211 );
$mem->addserver( '192.168.0.2' , 11211 );
$mem->addserver( '192.168.0.3' , 11211 );
$mem->addserver( '192.168.0.4' , 11211 );
 
 
//设置,'myword'参数代表键key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒
if ($mem->set( 'myword' , 'hello world' ,MEMCACHE_COMPRESSED, 50 ))
{
     echo "设置值成功!" ;
}
 
//读取键myword值
$value = $mem->get( 'myword' );
if (!$value)
{
     echo "读取失败!" ;
}
else
{
     echo "读取的值=" .$value;
}
 
?>

 

<8>memcache的访问是无用户状态,安全性需要考虑,一般通过放在内网,并通过防火墙限制外网访问memcache端口来达到安全

<9>通过修改php.ini,可以把session的值放入memcache服务器中

session.save_handler = files改成session.save_handler = memcached

session.save_path = "N;MODE;/path"改成 session.save_path = "tcp://127.0.0.1:11211"

目录
相关文章
|
19天前
|
数据安全/隐私保护
PHP-Casbin 中 ABAC 的使用方法
PHP-Casbin 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理。
19 0
|
8月前
|
Linux 应用服务中间件 PHP
Linux下搭建PHP环境-源码编译安装PHP7.2
Linux下搭建PHP环境-源码编译安装PHP7.2
363 0
|
1月前
|
SQL 安全 JavaScript
在多用户环境中,如何确保 PHP Shell 的安全性?
在多用户环境中确保 PHP Shell 安全,需采取限制执行环境、禁用危险函数、使用安全模式、采用 `suPHP` 或 `PHP-FPM`、使用参数化查询、输入验证、转义命令、强化会话管理、合理配置错误处理、正确设置文件权限及定期更新等措施。这些策略有助于防范潜在的安全威胁。
|
4月前
|
SQL 安全 JavaScript
在多用户环境中,如何确保 PHP Shell 的安全性?
在多用户环境中,如何确保 PHP Shell 的安全性?
|
5月前
|
关系型数据库 MySQL 应用服务中间件
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
这篇文章介绍了如何在Windows 7系统上搭建PHP、MySQL和Apache环境,并部署ECShop项目,包括安装配置步骤、解决常见问题以及使用XAMPP集成环境的替代方案。
68 1
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
|
3月前
|
缓存 NoSQL 数据处理
原生php实现redis缓存配置和使用方法
通过上述步骤,你可以在PHP项目中配置并使用Redis作为高性能的缓存解决方案。合理利用Redis的各种数据结构和特性,可以有效提升应用的响应速度和数据处理效率。记得在实际应用中根据具体需求选择合适的缓存策略,如设置合理的过期时间,以避免内存过度消耗。
81 0
|
5月前
|
Web App开发 关系型数据库 PHP
使用 Docker 快速搭建多版本 PHP 开发环境
使用 Docker 快速搭建多版本 PHP 开发环境
108 2
|
5月前
|
存储 PHP 数据安全/隐私保护
PHP类的使用方法
【8月更文挑战第2天】PHP类的使用方法
48 2
|
5月前
|
应用服务中间件 Linux 网络安全
【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
|
5月前
|
Linux PHP
【Azure 应用服务】PHP项目部署到App Service for Linux环境中,如何修改上传文件大小的限制呢?
【Azure 应用服务】PHP项目部署到App Service for Linux环境中,如何修改上传文件大小的限制呢?