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

于是准备将一部分常用数据通过缓存在服务器内存中,减少对数据库的操作来缓解压力(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. [Bayesian] “我是bayesian我怕谁”系列 - Continuous Latent Variables

    打开prml and mlapp发现这部分目录编排有点小不同,但神奇的是章节序号竟然都为“十二”. prml:pca --> ppca --> fa mlapp:fa --> pca ...

  2. mysql开启慢查询日志以及查看(转载自网络)

    转载自http://database.51cto.com/art/201309/410314_1.htm

  3. nginx虚拟机配置(支持php)

    由于本人水平有限,以下记录仅作参考. 下面贴出我的一份正常运行的nginx服务器虚拟机配置./usr/local/nginx/conf/vhost/www.xsll.com.conf server { ...

  4. 关于easyui的datagrid属性出现乱码问题

    今天遇到这个问题也是纠结了好久,经过在网上各种查询总结,得出以下经验: 1:网页字符集设置为UTF-8: <meta content="charset=UTF-8 " /&g ...

  5. Problem B: 大整数的加法运算 升级版

    #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> ...

  6. details和summary可以对内容进行折叠

    使用<details>和<summary>元素 它可以在body的任意地方使用下面有一个小例子 <!DOCTYPE html> <html lang=&quo ...

  7. 运维必须掌握的150个Linux命令

    线上查询及帮助命令(1个)man 目录操作命令(6个)ls tree pwd mkdir rmdir cd 文件操作命令(7个)touch cp mv rm ln find rename 文件查看及处 ...

  8. 关于c# SESSION丢失问题解决办法

    我们在用C#开发程序的时候经常会遇到Session很不稳定,老是数据丢失.下面就是Session数据丢失的解决办法希望对您有好处.1.在WEB.CONFIG文件中修改SESSION状态保存模式,如:& ...

  9. python --- 协程编程(第三方库gevent的使用)

    1. 什么是协程? 协程(coroutine),又称微线程.协程不是线程也不是进程,它的上下文关系切换不是由CPU控制,一个协程由当前任务切换到其他任务由当前任务来控制.一个线程可以包含多个协程,对于 ...

  10. sso单点登录,单点登录原理图,单点登录图解,单点登录

    sso单点登录,单点登录原理图,单点登录图解,单点登录 ============================== ©Copyright 蕃薯耀 2017年11月20日 http://www.cnb ...