最近做的一个项目需要不断对数据库内容进行读取和刷新,所以数据库压力很大,用户数目多的时候响应速度也严重受影响。

于是准备将一部分常用数据通过缓存在服务器内存中,减少对数据库的操作来缓解压力(memcached如何减轻数据库压力可见参考1),同时提升响应速度。简单的说:就是假如有十个请求都是需要读取数据库中的同一组数据,那么你通过php脚本实现的读取,需要执行十次读取,如果我在第一次读取并响应的时候将这部分数据以“key-value”的形式缓存在内存中,当还有同样的请求到来直接反馈这部分内存数据,是不是既减轻了数据库压力又提升了速度。

显然,php这种脚本语言是不常驻内存无法做到这个功能的,这个时候memcached服务就派上用场了,可是折腾了小半天,入了不少坑总算搞定分享给大家。

注:本文的经验了过程基于windows server下的php来说明,linux的还请注意。

首先特别容易混淆的:

1.memcached是用来缓存数据的一种服务,将一些常用的数据通过“key-value”的形式存储在数据库内存中。避免了每次访问都需要读取数据库带来的巨大压力。

2.memcache(注意少了一个d)是php可以利用的一个拓展(dll),我们利用这个拓展,就可以在PHP中对memcached中缓存的数据进行操作。

简单来说这两者虽然一个字母d之差(d是 daemon:守护进程,就是说它是跑起来在内存中缓存数据的程序主体),却好比MySQL和PHPmyadmin之间的关系。 根据我的理解,你的数据缓存不一定是在当前web的server上,你可以通过ip+port(当然本机就localhost)的形式连接你在本机或者另外一台电脑上的memcached service来存取数据。这也应该是memcached所谓的分布式的意思,就好比你的PHPmyadmin和MySQL可以在不同的机器上。

所以,正确的姿势是,首先安装memcached,然后作为一个service启动常驻内存,这样它就可以缓存数据了,通过命令行也可以进行操作。

请在你的services中查看是否有了memcached这个服务

但是,因为我准备在php中操作就需要下载memcache的dll放在php的extension中并且在ini配置文件中说明,然后通过phpinfo()函数测试该模块是否加载成功。

如果模块加载不成功请检查以下3个问题:

1.是否在你的php.ini中添加了extension=php_memcache.dll。

2.是否将下载的php_memcache.dll放在你的php的ext文件夹中。

3.是否下载了对应你的php版本的正确的dll,包括NS和NTS的分别。(要知道自己的php版本信息,一样利用phpinfo可以查看)

当module加载成功,你就可以利用下载memcache时候获得的example.php进行测试了。

<?php

$memcache = memcache_connect('localhost', 11211);

if ($memcache) {
$memcache->set("str_key", "String to store in memcached");
$memcache->set("num_key", 123); $object = new StdClass;
$object->attribute = 'test';
$memcache->set("obj_key", $object); $array = Array('assoc'=>123, 345, 567);
$memcache->set("arr_key", $array); var_dump($memcache->get('str_key'));
var_dump($memcache->get('num_key'));
var_dump($memcache->get('obj_key'));
} else {
echo "Connection to memcached failed";
} ?>

在浏览器中测试,便会获得:

string(28) "String to store in memcached" int(123) object(stdClass)#3 (1) { ["attribute"]=> string(4) "test" }

大工告成,把你的服务优化一下,看看速度是不是天壤之别!

关于memcache.dll中提供的方法和使用说明,可以参考http://kimi.it/259.html

对memcached还有兴趣,希望了解其工作原理细节部分的童鞋请移步参考3.

参考

1.使用PHP连接、操纵Memcached的原理和教程

2.http://www.runoob.com/memcached/php-connect-memcached.html

3.memcached的原理解析

memcached 安装以及在php中使用的更多相关文章

  1. ubuntu14中 memcached安装与使用

    第一步,先安装lib-event 下载lib-event  的包http://libevent.org/ 下载完之后,解压安装 ./configure –prefix=/usr (或 ./config ...

  2. Linux Memcached安装以及PHP扩展安装

    一:安装libevent 由于memcached安装时,需要使用libevent类库,所以先安装libevent 1.下载 #wget   http://www.monkey.org/~provos/ ...

  3. linux下memcached安装以及启动

    1. 准备安装文件 下载memcached与libevent的安装文件 http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz(me ...

  4. 【转】Memcached安装

    解析:Memcached是什么? Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度. 一.软件版本    ...

  5. Memcached安装及配置

    一.Memcached介绍 1.Memcached是国外社区网站LiveJournal团队开发,通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能. 2.官方站点http://me ...

  6. Windows和Linux环境下Memcached安装与配置(转)

    一.memcached安装配置 windows平台安装 1.memcached-1.2.6-win32-bin.zip下载地址: http://code.jellycan.com/memcached/ ...

  7. linux下Memcached安装以及PHP的调用

    一:安装libevent 由于memcached安装时,需要使用libevent类库,所以先安装libevent 1.官网下载:http://libevent.org/ #wget   https:/ ...

  8. Asp.Net Memcached安装配置使用、安全性

    Memcached安装配置使用  一,准备        你需要有一下软件:       VS.NET(05/08)       SQLSERVER       memcached服务器端以及客户端类 ...

  9. Memcached安装配置最大使用内存

    Memcached安装配置最大使用内存 项目做了很多,虽然用memcached的项目也有很多.但是没有太关注安装memcached细节问题 最近做了一个项目,把很多东西都放到memcached缓存中, ...

随机推荐

  1. 微信小程序之页面跳转路径问题

    错误如下: 业务需求:在movie页面点击进入detail页面. 在遍历跳转路径的时候,写绝对路径了 只需改一下就好了 教程参考地址:http://blog.csdn.net/reylen/artic ...

  2. Warning: connect.static is not a function

    grunt-contrib-connect从0.11.x版本开始不支持connect.static和connect.directory 你应该安装serve-static(加载静态文件)和serve- ...

  3. HDU1005 Number Sequence (奇技淫巧模拟)

    A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mo ...

  4. Code Lock

    Code Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Su ...

  5. js中编码问题escape、encodeURI

    未分类 1.js对文字进行编码涉及3个函数:   escape,encodeURI,encodeURIComponent, 相应3个解码函数:unescape,decodeURI,decodeURIC ...

  6. 开发一个基于 Android系统车载智能APP

    很久之前就想做一个车载相关的app.需要实现如下功能: (1)每0.2秒更新一次当前车辆的最新速度值. (2)可控制性记录行驶里程. (3)不连接网络情况下获取当前车辆位置.如(北京市X区X路X号) ...

  7. R-CNN论文翻译——用于精确物体定位和语义分割的丰富特征层次结构

    原文地址 我对深度学习应用于物体检测的开山之作R-CNN的论文进行了主要部分的翻译工作,R-CNN通过引入CNN让物体检测的性能水平上升了一个档次,但该文的想法比较自然原始,估计作者在写作的过程中已经 ...

  8. 单元测试框架 unittest 的运行方法if __name__ == '__main__': unittest.main()

    1. if __name__ == '__main__': unittest.main()2. 测试用例实例根据测试的特点分组在一起. unittest为此提供了一个机制:测试套件由unittest' ...

  9. ldap数据库--ODSEE--复制协议

    简单介绍一下ODSEE的复制拓扑的建立,复制协议可以通过管理界面进行创建,也可以通过命令行创建.在此之前需要了解一些复制协议的相关概念,这里针对OESEE. 1,复制角色 master(提供者,也可以 ...

  10. KODExplorer可道云-轻松搭建属于自己/团队的私有云网盘服务

    如今国内各大网盘关停的也快差不多,百度网盘限速严重.国外大牌的如 Dropbox 或 Google Drive又在长城之外,在各种VPN都被封禁的大背景下,科学上网也困难重重,麻烦到要死.那么,除了购 ...