http://www.crazyant.net/1014.html

Memcahced开源分布式内存对象缓存系统通过减少数据库的负担,从而能够加速你的web应用。在本文中我将解释怎样实现一个基于Memcahced的缓存系统。

数据库

实例中使用的数据库表包含一个自增的id,一个标题和一个链接字段:

 
 
1
2
3
4
5
6
CREATE TABLE demos
(
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(300),
link VARCHAR(300),
);

第一次用户请求到达

第一次用户发送请求,PHP程序会在访问db数据库的同时,将访问的数据写入Memcached系统。

如图所示,user发送了req请求,application发送数据请求到database,database在将数据返回给application的同时,将数据缓存到了Memcached服务器。

第二次用户请求到达了

第二次用户请求到达,会直接读取Memcached服务器的缓存,而不是数据库中的内容,从而减轻了服务器的负担。

本图显示,第二次的请求,application直接从Memcached(简称Mc)读取数据。

Memcached的安装方法

网络上有大量关于Memcached安装的方法,其实它就是一个缓存服务器应用程序,意思就像是你装了个Mysql一样,装好了用账号密码IP地址连一下就能使用。

以下是一些很好的资源:

php_memcache.dll

在windows上安装Memcached的方法

在Windows7的Xampp上安装Memcached的方法

在Windows7上的PHP5.3安装Memcached的方法

index.php用PHP操作Memcached的演示

 
 
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
<?php
include('db.php');
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
 
//缓存服务器中,都是键值对,这里我们设定唯一的键
$key = md5('www.crazyant.net');
$cache_result = array();
//根据键,从缓存服务器中获取它的值
$cache_result = $memcache->get($key);
 
//如果存在该键对应的值,说明缓存中存在该内容
if($cache_result){
    //那我们直接取出缓存的内容就可以了
    $demos_result=$cache_result;
} else {
    //如果缓存中没有该键对应的值数据,说明请求是第一次到达
 
    //首先,我们需要从数据库中取出该值
    $v=mysql_query("select * from demos order by id desc");
    while($row=mysql_fetch_array($v)){
        //取出的内容就是我们需要的
        $demos_result[]=$row;
    }
    //最后,将这次从数据库取出的内容,放到Memcached缓存服务器,这里就是缓存的精髓
    $memcache->set($key, $demos_result, MEMCACHE_COMPRESSED, 1200);
}
 
//前面的所有操作,最终返回了我们需要的数据
// foreach($demos_result as $row){
    echo '<a href='.$row['link'].'>'.$row['title'].'</a>';
}
 
?>

db.php用于连接数据库的代码

你需要改变代码中的IP地址、用户名、密码、数据库名字。

 
 
1
2
3
4
5
6
7
8
9
<?php
$mysql_hostname = "localhost";
$mysql_user = "username";
$mysql_password = "password";
$mysql_database = "database";
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password)
    or die("Opps some thing went wrong");
mysql_select_db($mysql_database, $bd) or die("Opps some thing went wrong");
?>

注:本文参考Memcached with PHP

关于Windows7 下面安装memcached和php的memcache扩展

http://blog.sina.com.cn/s/blog_61d0b6cd0100w9qq.html

Php代码与memcached的交互和与mysql的交互原理是一样的,需要安装一个服务器端的memcached ,现有的交互处理过程已经封装成了一个php的扩展了;需要在php.ini中,将这个扩展加进去。

Php memcached官方手册地址:http://cn2.php.net/manual/en/memcached.get.php

说说我的安装过程:

1.我的环境:php-5.2.6. memcached-win32-1.2.6.

2. 根据下面的步骤安装完以后,可以去控制面板看看memcached服务是否启动起来。如果没有此服务需要重新安装,如果有了,不能启动,可以看一下是不是路径错误了。【我的就是路径错误,启动不起来。找不到指定文件。】

3.php5.2.6自带memcache.dll文件,可以打开phpinfo()看看有没有memcache的扩展。如果没有,可以去pecl地址下载对应版本的memcache替换掉原来的。

一:下载地址:

php扩展库pecl下载地址:

http://museum.php.net/php5/

二:安装与配置:

安装方法一:下载以后,解压,然后放到C盘根目录下。双击memcached.exe就可以启动memcached服务了,这时,你可以打开任务管理器,如果在进程里出现memcached.exe就说明memcached服务已经启动了,还要让cmd窗口开着,这样才是启动了memcached服务。

安装方法二:

1.下载Windows版的memache的压缩包

2.解压到合适的位置如:D:memached目录下面。

3.进入命令行切换到该目录下面,可以用dir看一下目录下面的文件信息。

4. 输入:memached.exe -d install 安装服务器。

5. 输入:memached.exe -d start启动服务器,等到下次启动系统的时候,此服务会自动启动。默认的端口号为11211.

配置:

1.    下载pecl模块包(地址如上),解压后将php_memache.dll放到php目录的ext子目录下,为了使得能正常使用,最好下载和php版本一致的模块包。

2.    在php.ini文件中导入'extension=php_memcache.dll'

然后重启apache,估计就可以了(可以在phpinfo.php 中,看看是否有memcached模块),当然了,我们可以写一个实验一下

$memcache_obj = new Memcache;

$memcache_obj->connect('localhost', 11211);

$memcache_obj->set('var_key', 'This is a memcached test!',MEMCACHE_COMPRESSED, 50);

echo $memcache_obj->get('var_key');

备注:

1)memcached 的几个指令:

-p监听的端口
-l连接的IP地址, 默认是本机
-d start启动memcached服务
-d restart重起memcached服务
-d stop|shutdown关闭正在运行的memcached服务
-d install安装memcached服务
-d uninstall卸载memcached服务
-u以的身份运行(仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

2)memcached相关的函数:

01.Memcache::add —添加一个值,如果已经存在,则返回false
02.Memcache::addServer — 添加一个可供使用的服务器地址
03.Memcache::close —关闭一个Memcache对象
04.Memcache::connect —创建一个Memcache对象
05.memcache_debug —控制调试功能
06.Memcache::decrement —对保存的某个key中的值进行减法操作

07.Memcache::delete —删除一个key值
08.Memcache::flush —清除所有缓存的数据
09.Memcache::get —获取一个key值
10.Memcache::getExtendedStats —获取进程池中所有进程的运行系统统计
11.Memcache::getServerStatus —获取运行服务器的参数
12.Memcache::getStats —返回服务器的一些运行统计信息
13.Memcache::getVersion —返回运行的Memcache的版本信息
14.Memcache::increment —对保存的某个key中的值进行加法操作
15.Memcache::pconnect —创建一个Memcache的持久连接对象
16.Memcache::replace — R对一个已有的key进行覆写操作
17.Memcache::set —添加一个值,如果已经存在,则覆写
18.Memcache::setCompressThreshold —对大于某一大小的数据进行压缩
19.Memcache::setServerParams —在运行时修改服务器的参数

3)zend framework的cache后端支持memcached,我们也可以来试试看

$front = array('lifeTime' =>100,'automatic_serialization' =>true);
     $back = array('server' =>array(array('host' =>'127.0.0.1','port' =>11211,'persistent' =>true)),compression =>true);       //后端server是个二维数组,每一维代表一个连接。
     $cache = Zend_Cache::factory("Core","Memcached",$front,$back);
     $cache->save('This is zend memcached','zend');
     echo $cache->load('zend')."<br />";

现在zend framework 的代码,自己还没有详细研究,等自己以后在学习的过程中,可以尝试用一下;

使用PHP连接、操纵Memcached的原理和教程的更多相关文章

  1. Java 连接池的工作原理(转)

    原文:Java 连接池的工作原理 什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释 ...

  2. PHP7安装Memcache+Memcached缓存加速WordPress教程

    PHP7安装Memcache+Memcached缓存加速WordPress教程 2016年1月19日 6,691 Views 生活方式 PHP7最显著的变化就是性能的极大提升,已接近Facebook开 ...

  3. ROS连接ABB机械臂调试详细教程-ROS(indigo)和ABB RobotStudio 6.03.02-

    在ROS industrial介绍中,给出了ROS和常用机械臂的连接方式.具体信息可以参考:http://wiki.ros.org/Industrial ROS连接ABB机械臂调试详细教程-ROS(i ...

  4. Git连接github以及gitee等使用教程

    Git连接github以及gitee等使用教程 一.初始化本次仓库 在想要放置仓库的文件夹出git bash输入命令 git init 二.生成ssh 在github或者gitee注册账户, 在本地生 ...

  5. 【转】memcached工作原理介绍

    FROM: http://my.oschina.net/flynewton/blog/8984 官方主页: http://memcached.org/ 面临的问题  对于高并发高访问的Web应用程序来 ...

  6. Memcached的原理分析与配置

    一.Why Memcached? • 高并发访问数据库的痛楚:死锁! • 硬盘IO之痛:本机:AspNet:HttpRuntime.Cache • 多客户端共享缓存 • Net+Memory>& ...

  7. 【JAVA】 Java 连接池的工作原理

    什么是连接?         连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“.         有人接受这种说法,却不知道它的真正含义.因此,下面我将解释它 ...

  8. memcached工作原理与优化建议

    申明,本文为转载文:http://my.oschina.net/liuxd/blog/63129 工作原理 基本概念:slab,page,chunk. slab,是一个逻辑概念.它是在启动memcac ...

  9. memcached工作原理

    1.Memcached处理的原子是每一个(key,value)对(以下简称kv对),key会通过一个hash算法转化成hash-key,便于查找.对比以及做到尽可能的散列.同时,memcached用的 ...

随机推荐

  1. MAX16054

    MAX16054是带有单个开关去抖以及内部闭锁电路的按键通/断控制器,可接受机械开关产生的嘈杂输入,并经过一个有工厂设置的延迟时间后产生干净的数字锁存输出. 开关通.断期间,MAX16054无接触抖动 ...

  2. nyoj 199 无线网络覆盖

    无线网络覆盖 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们的乐乐同学对于网络可算得上是情有独钟,他有一个计划,那就是用无线网覆盖郑州大学. 现在学校给了他一个 ...

  3. IE下使用ADODB.Stream实现断点续传

    最近研究了一下IE自带的一些Activex控件,可以比较简单的实现断点续传功能 不过这种方式不推荐,因为安全性较低,而且需要修改客户端注册表,调低ie安全配置 还有就是我比较懒,只打算写个思路和几个关 ...

  4. [css]《CSS知多少》

    http://www.cnblogs.com/wangfupeng1988/p/4325007.html

  5. 好的 ASP.Net网站、博客

    1.优秀的个人技术博客 http://www.tracefact.net/Asp-Net/

  6. 委托、匿名函数、Lambda表达式和事件的学习

    委托: 还记得C++里的函数指针么?大家可以点击这里查看一下以前的笔记.C#的委托和C++中的函数指针效果一致. 当我们需要将函数作为对象进行传递和使用时就需要用到委托. 下面我们看一个例子: usi ...

  7. iOS 正则表达式小结

    #pragma mark - 正则第一种表示方式-利用NSPredicate(谓词)匹配//    NSString *email = @"15078357696@163.com" ...

  8. 如何用 iptables 禁止某个ip?

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. javascript 引擎Rhino源代码分析 浅析 实例函数对象及this

    http://blog.csdn.net/liantian_wu/article/details/49797481

  10. Android 导入导出CSV,xls文件 .

    1 . http://www.bangchui.org/read.php?tid=62 2 .http://blog.csdn.net/xinzheng_wang/article/details/77 ...