memcache的简单应用

如今互联网崛起的时代,各大网站都面临着一个大数据流问题,怎么提高网站访问速度,减少对数据库的操作;作为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>准备:参照配置
<2>开始实践,memcached主要有crud操作(即创建、读取、更新、删除值操作,具体可以查阅手册),下面弄个简单的设置值,然后读取值的操作
a.设置值页面

[PHP]  纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
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.读取值页面

[PHP]  纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
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.删除、更新例子:

[PHP]  纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
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
<?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对象下还有许多方法,可以通过翻阅手册了解。

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

[PHP]  纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
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 ;
}
  
?>




<4>memcache的访问是无用户状态,安全性需要考虑,一般通过放在内网,并通过防火墙限制外网访问memcache端口来达到安全
<5>通过修改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"

转载于:https://www.cnblogs.com/wangfenphph2/p/7051010.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值