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

于是准备将一部分常用数据通过缓存在服务器内存中,减少对数据库的操作来缓解压力(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. bug:页面交互操作引发的问题

    最近在测试一些h5页面,突然悟到一些测试点 需求点: 用户可以在页面领取礼物,领取的礼物在页面底部展示,用户点击礼物可调起分享弹窗,礼物超过一屏可左右滑动, bug的表现形式: 仅当礼物超过一屏时(一 ...

  2. java7大排序算法

    1.冒泡排序 package lizicong; import java.util.Scanner; public class BubbleSort { /* * 属于交换排序:稳定 * 排序原理:相 ...

  3. 50 years, 50 colors

    50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  4. header操作cookie

    root@kl20080094:~# curl -I "http://www.xxx.com" HTTP/1.1 200 OK Server: nginx/0.8.53 Date: ...

  5. 添加无登录权限的SSH用户命令

    useradd -M -s /sbin/nologin -n username  passwd username userdel -r username

  6. Scrum Meeting Alpha - 1 (团队任务分解)

    团队任务分解 Alpha阶段项目目标 实现一个博客园班级博客的Android 客户端: 实现班级博客的常用功能(不包括投票.公告.校区) 有一个较为简洁美观.操作方便的界面 添加消息提醒功能. 任务拆 ...

  7. transition过度

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 由浅入深学习springboot中使用redis

    很多时候,我们会在springboot中配置redis,但是就那么几个配置就配好了,没办法知道为什么,这里就详细的讲解一下 这里假设已经成功创建了一个springboot项目. redis连接工厂类 ...

  9. TFS在项目中DevOps落地进程(下)

    紧接上篇 TFS在项目中Devops落地进程(上) 再接着说TFS相关之前先插入一个番外篇,虽然跟TFS关系不大但跟DevOps关系很大,觉得有必要在此乱入一下. 番外篇--监控之Applicatio ...

  10. 【分享】jQuery无插件实现 鼠标拖动图片切换 功能

    前言 我就想随便叨逼叨几句,爱看就看几句,不爱看就直接跳过看正文就好啦~ 这个方法是仿写页面时我自己研究出来,可能有比我更简单的方法. 但我不管,因为我没查我不知道,我就觉得我的最好啦,耶耶耶~ 效果 ...