Memcached笔记

Memcached的基本概念
php

是一种缓存技术(内存), 你能够把它想象成一张巨大的内存表:形式[他就是一个服务]mysql

key                    val linux

key(字符串)         能够放(字符串【二进制数据[视频、音频、图片],数值,数组,对象,)算法


安装memcache服务sql

步骤数据库

1. 下载apache

2. 安装json

 

卸载 memcached.exe d uninstall   (-d  daemon 后台程序)windows

中止服务 memcahced.exe d stop 数组

安装 memcached d install 

 

3. 测试是否安装成功

启动 

memcached d start 

咱们使用 

netstat an   看看是否有 11211 端口在监听,若是在监听,则说明成.

netstat anb  (b 能够显示 是哪一个程序在监听这个端口.)

若是如今,我要杀掉这个程序 ,windows 下  可使用任务管理器杀死.

linux  kill -9 进程号         killall 进程名 

 

大部分同窗安装Ok, 只有是xpok,

win7 的同窗有一部分没有ok

a. 把 memcached.exe 放在 中文目录 这样不行

b. 安装使用的是 普通用户, 你要切换成 administror   ctrl+alt+delete

 

 

如何操做memcached 服务.

学习如何完成crud操做! (任务驱动 |  )

 

telnet 的具体使用

a. 登陆到telnet 

语法 

telnet ip 端口 

 

登陆到  11211 端口 

telnet 127.0.0.1 11211 

 

如何对mem进行 curd 操做

 

添加

add key1  0  60  5

 

说明  key1 表示 键值 ,能够本身指定

表示一个格式, 不变

60 存放在mem多长时间

表示存放的数据是多少个字节

 

查询

get 键值

举例

get hsp1 

说明若是 hsp1 不存在,或是是由于时间到而被 memcache 删除了,将获得空.

 

修改

有两种方法

 

replace 键值  时间 大小  【这里有一个注意事项,该键值必须存在】

举例:

replace hsp1 0 40 8

 

第二种方法:

set 键值 时间 大小 【若是这个键存在,则替换,若是不存在,则表示添加一个新的键值】

 

案例

set hsp1 0 60 5 

 

删除 

 

语法

delete 键值

如今,若是咱们在mem服务中,须要作一个计数器(存放值必定是一个数),怎么办?

 

key          val

counter        0

add counter 0 0 100

incr key 数字

 

telnet使用ok!

 

如何使用memcache 的扩展来操做memcached  服务 

(1) 把 php_memcache.dll  拷贝 ~php/ext/目录

(2) 在 php.ini 中添加一句话

;引入php_memcache.dll

extension=php_memcache.dll

(3) 使用 PHP 程序 curd

<?php

 

//建立对象

$mem=new Memcache;

//链接到mem服务器

$mem->connect("127.0.0.1",11211);

//添加,该函数返回true

 

if($mem->add("hsp1","china",MEMCACHE_COMPRESSED,60)){


echo "添加ok";

}else{

echo "添加err";

}

 

//查询

 

$val=$mem->get("hsp1");

echo "val=$val";

echo "<br/>";

//修改 replace  set

if($mem->replace("hsp1","hello,world",MEMCACHE_COMPRESSED,60)){

echo "replace ok";

}else{

echo "replace 失败";

}

echo "<br/>";

//set 若是存在就替换,不存在,就添加

if($mem->set("hsp1","hello,world , 你好!",MEMCACHE_COMPRESSED,60)){

echo "set ok";

}else{

echo "set 失败";

}

 

echo "<br/>";

//删除

if($mem->delete("hsp1")){

echo "删除ok";


}

 

(4) 谈谈细节,增强

讨论memcache中什么数据类型能够放入字符串 ,数字 ,数组对象 ,资源

 

 

当咱们在mem中存取对象是,在取的时候,咱们须要在前面引入这个类的声明.

 

把这个代码:

<?php

 

//放入数组

$arr=array("1"=>"beijing","2"=>"天津");

//数组默认是序列号 

if($mem->add("city2",json_encode($arr),MEMCACHE_COMPRESSED,60)){

echo "city ok";

}else{

echo "city fail";

}


 

//对象

class Dog{

public $age;

public $color;

public function __construct($age,$color){

$this->age=$age;

$this->color=$color;

}

}

 

$dog1=new Dog(30,"红色");

 

if($mem->add("dog1",$dog1,MEMCACHE_COMPRESSED,60)){

echo "dog1 ok";

}else{

echo "dog1 fail";

}

echo "<br/>";

$mydog=$mem->get("dog1");

echo $mydog->age;

var_dump($mydog);

 

$con=mysql_connect("localhost","root","root");

echo "<br/>";

if($con){

//放入mem

if($mem->add("conn",$con,MEMCACHE_COMPRESSED,160)){

echo "资源添加ok";


}else{

echo "资源添加失败";

}

}


工做环境: apache 的 httpd.conf 文件 php.ini 文件是有其余人来管理,你没有权利去修改这些配置文件,可是你还但愿去使用memcached 

 

解决方法咱们使用原生态的代码来完成.->这里咱们能够直接使用 

咱们能够把 memcached-clinet.php 引入到咱们的项目中,而后我就能够直接来完成了.

 

代码完成 crud操做.

① 先关闭 extension

② 咱们写mem4.php 并引入咱们的 memcached-clinet.php 通常说全部的技术文档,都会给你一个案例,因此你照这个案例能够快速使用

<?php

 

//直接使用函数来操做咱们的memcached

 

include "memcached-client.php";

 

 $mc = new memcached(

array(

              'servers' => array('127.0.0.1:11211'),

               'debug'   => false,

               'compress_threshold' => 10240,

               'persistant' => true));

//添加 【这里仍然支持添加 数组,对象,数值 】

   if($mc->set('hsp1', "你好!北京!",60)){

echo "ok";

   }else{

   echo "fail!";

   }

   //获取

   $val=$mc->get("hsp1");

   echo "<br/>"."val=$val";

 

   //修改 直接使用set函数,就是 replace

   if($mc->replace("hsp1","北京",30)){

   echo "<br/>修改为功!";

   }else{

  echo "<br/>修改fail!";

   }


 

 

 //获取

   $val=$mc->get("hsp1");

 //  echo "<br/>"."修改后 val=$val";


if(is_array($val)){


echo "<pre>";

print_r($val);

echo "</pre>";

}else if(is_float($val)){

 

echo "<br/>"."修改后 val=$val";


}else if(is_string($val)){

 

echo "<br/>"."修改后 val=$val";


}

 

   //删除

 

/*  if($mc->delete("hsp1")){

   echo "<br/>删除成功!";

   }else{

  echo "<br/>删除fail!";

   }*/

 

关于memcache的机制

1. 是基于 c/s 2. 底层的协议是 普通文本

2. 是基于 libevent机制处理

3. memcache的数据是放在内存

4. memcache自己支持 LRU 算法      

[算法/网络/数据库/操做系统+编译原理 pl0[if + -]] 

5. 基于客户端分布式.示意图

spacer.gif 

 

memcache细节

1. 生命周期

数据的生命周期是指定的,只有把数据放入就开始计时,只要时间到,就销毁.

session(1440s)  若是你没有关闭浏览器,而且没有使用session 1440后销毁

1439使用一次这个sesion ,又开始从新计时.

2. 如何把session 放入memcache服务器

sesion 垃圾回收的几率是 session.gc_probability/ session.gc_divisor 

步骤

(1) 由于session 默认是放在文件中, windows下 c:/windows/Temp

(2) 从新配置php.ini 把关于session配置修

session.save_handler = memcache

修改路径

session.save_path = "tcp://127.0.0.1:11211"

 

(3) 若是咱们不去修改php.ini 也达到这样的效果

可使用 ini_set 函数来玩

 

代码:

 

<?php

 

  ini_set("session.save_handler","memcache");

  ini_set("session.save_path","tcp://127.0.0.1:11211");

  session_start();

  $_SESSION['name']="shunping";

 

  echo "<br/>存放sesionok";

  echo "<br/>session_id=".session_id();

  //取出

  $val=$_SESSION['name'];

  echo "<br/>session name=".$val;

 

(4) memcache是无用户状态,也就是说,是全部用户共享的数据

(5) 安全性.

windows. 下咱们使用防火墙  同时 打开 80端口. , 只让咱们本身 php程序去操做咱们的memached服务。这样咱们的memcache就安全,

linux下 iptables -a input -p tcp -s 127.0.0.1 dport 11211 -j ACCEPT

 

总结:

--我本身的一个小结如何决定是否使用memcached

--若是是一个小网站,pv(page view)值不大,就不考虑使用memcache

--变化频繁,查询频繁,可是不必定写入数据库(适合memcache)

--变化频繁一变化就要入库[好比股票,金融.](不适合memcache)

 

 

memcache 和 session 对比

1. memcache 放入内存,session默认放入文件,可是经过配置,也能够入memcached

2. 生命周期 (memcahce 数据一旦建立就开始时间,到时就销毁  , session 建立后计时,可是若是在没有成垃圾前,你又使用过一次,则从新计算)

3. 解决的问题不同 memcache为了提高速度 , session 是用于追踪用户的行为

相关技术  Redis  也是 key/value 一种缓存技术.

相关文章
相关标签/搜索