原文: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
=
newMemcache(); 
//连接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
=
newMemcache(); 
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
=
newMemcache(); 
//连接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
=
newMemcache();
//添加多台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"

PHP环境下Memcache的使用方法的更多相关文章

  1. Oracle 11g RAC环境下Private IP修改方法及异常处理

    Oracle 11g RAC环境下Private IP修改方法及异常处理 Oracle 11g RAC环境下Private IP修改方法及异常处理 一. 修改方法 1. 确认所有节点CRS服务以启动 ...

  2. 分布式环境下的id生成方法

    分布式环境下的id生成方法   前几天研究数据库分表分库的问题,其中有一个关键的地方就是生成唯一键的问题,假如数据表有1亿条数据,而且还在不断的增加,这里我们就需要考虑到分表分库,假设我们采用Hash ...

  3. CDN 环境下获取用户IP方法

    CDN 环境下获取用户IP方法 1 cdn 自定义header头的X-Real-IP,在后端使用$http_x_real_ip获得 proxy_set_header X-Real-IP $remote ...

  4. 转载:一种云环境下SaaS软件部署方法及装置与流程

    转载:http://www.xjishu.com/zhuanli/55/201710103925.html 本发明涉及云计算技术领域,特别是涉及一种云环境下SaaS软件部署方法及装置. 背景技术: 随 ...

  5. Visual Studio2008环境下查找C#中方法的“查看所有引用”

    在Visual Studio开发环境下,想必F12我们都很熟悉了,有没有用过“查看所有引用”呢? 尤其是在一个解决方案中,包含了很多项目,彼此相互的调用是很常见的,例如三层架构, BLL调用DAL,D ...

  6. Kubernetes环境下的各种调试方法

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文介绍在Kubernetes环境下的调试方法,希望对读者有用.如果关 ...

  7. 交叉编译问题记录-嵌入式环境下 GDB 的使用方法

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10693247.html 本文以嵌入式 Linux 环境下的 gdb 使用为例,记录交叉编 ...

  8. std::string在多字节字符集环境下substr的实现方法

    昨天写到<使用多字节字符集的跨平台(PC.Android.IOS.WP)编码/解码方法>中提到服务端使用std::string处理字符串,std::string对多字节字符集支持并不是很完 ...

  9. Nginx环境下设置zblog伪静态方法

    Apache的环境非常简单.可以点击创建 .htaccess就可以了 Nginx环境下设置伪静态,并没有那个一键创建的按钮.只看到了这样的一个提示. 别的环境未测试.宝塔面板中 反正我是没找到. 宝塔 ...

随机推荐

  1. 获取DLL中的方法名称

      OpenFileDialog obj = new OpenFileDialog(); if (obj.ShowDialog() == System.Windows.Forms.DialogResu ...

  2. [转]shell 变量替换

    转自:http://blog.csdn.net/xuhongning/article/details/6191515 1,参数替换: 不含有“:”的,只要定义了,就生效,不管是否为空 含有“:”的,即 ...

  3. BZOJ 3170 & 切比雪夫距离

    题意: 给出N个点,在这N个点中选一个点使其它的点与这个点的切比雪夫距离和最小. SOL: TJOI真是...厚道还是防水...这种题目如果知道切比雪夫距离是什么那不就是傻逼题...如果不知道那不就懵 ...

  4. POJ 2456 (二分)

    题目链接: http://poj.org/problem?id=2456 题目大意:n个房子,m头牛,房子有一个横坐标,问将m头牛塞进房子,每两头牛之间的最大间隔是多少. 解题思路: 不难看出应该二分 ...

  5. jquery.cookie.js使用

    1.下载jquery.cookie.js 官网:http://plugins.jquery.com/cookie/ 或 http://pan.baidu.com/s/1mgynA8g 2.使用方法 $ ...

  6. Codeforces Testing Round #10 A. Forgotten Episode

    水题,注意数据范围 #include <iostream> using namespace std; int main(){ long long n,a; cin >> n; ...

  7. ACM 交换输出

    交换输出 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数.(如果这个第一个数就是最 ...

  8. ACM: 限时训练题解- Travelling Salesman-最小生成树

    Travelling Salesman   After leaving Yemen, Bahosain now works as a salesman in Jordan. He spends mos ...

  9. cdoj 1334 郭大侠与Rabi-Ribi Label:贪心+数据结构

    郭大侠与Rabi-Ribi Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 最近 ...

  10. iframe高度自适应内容

    JS自适应高度,其实就是设置iframe的高度,使其等于内嵌网页的高度,从而看不出来滚动条和嵌套痕迹.对于用户体验和网站美观起着重要作用. 如果内容是固定的,那么我们可以通过CSS来给它直接定义一个高 ...