`
lvwenwen
  • 浏览: 955337 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

memcached笔记

阅读更多
 memcached 的基本概念

memcached 是一个高效的分布式的内存对象缓存系统 ,他可以支持把各种php的数据(array,对象,基本数据类型)放入到它管理的内存中.


 使用memached的好处是什么?


针对上面的的要求有三种方案
1. 传统的方法
<?php
$stu_id=$_GET[‘stu_id’];

//查询数据库

smaryt->assign(“view”);


?>

2. 页面静态化
<?php

$stu_id=$_GET[‘stu_id’];
$html_file=”stu_id1.html”
if(file_exitsts($html_file)){
//显示
exit
}
//查询数据库
//缓存.

smaryt->assign(“view”);

?>

3. 使用内存缓存
<?php
$stu_id=$_GET[‘stu_id’];
//到memcached缓存中,看看有没有学生信息
$mem=new Memcache;
if($info=$mem->get($stu_id)){
//取出学生信息
echo $info;
exit
}
//到数据库查询
ob_start();
$conn=....
.....
echo “..”;
//把从数据库中获取的结果,放入memcache中
$mem->add($stu_id,ob_get_contents(),MEMCACHE_COMPRESSED,60*60*24);
?>

访问速度
数据库<文件<内存

 原理图



 安装步骤

①下载memcached软件
②将memcached软件拷贝到某个目录,最好放在php开发环境目录下,便于管理
③安装  memcached –d install [卸载使用 memcached -d uninstall]
④启动 memcached 服务
(1)直接通过界面启动该服务
(2)在控制台下启动 memcached –d start   [命令一览表]
⑤查看memcached 服务是否启动成功! 默认端口11211


我们一起看看memcached 常用的命令.

特别说明;如果你的网站,需要的memcached 的内存大于64m,应当这样启动
memcached –m 256m –d start    LRU
如果你希望换一个端口
memcached -d -m 30 -l 127.0.0.1 -p 9000 -d start





面试题,请举例5个常用端口
80 apache/iis
21  ftp
23 telnet
3306  mysql
1521 oracle
1433 sql server
8080 tomcat

 使用方法

telnet -----> memcached缓存系统 (教学)

crud (create/read/upate/delete)

添加:
1. 连接到memcached
telnet 192.168.1.100 11211
add name 0 60 5     [说明 add 是指令名  name 是key的名字 (是以key/value存放), 0 标志, 60 表示数据存放 60s   5表示 放入多大数据 ], 如果一个key已经存在,再放入是失败的.

get name [获取 name的值]


//更新
set name 0 60 5   [如果 name 这个key存在,就是更新, 如果key不存在,就是添加]
//删除
delete key值


//其它用法看手册


 使用memcache 扩展(一堆函数)来操作 memcached缓存系统

① 在php.ini 中配置 extension
放入到 php/ ext /目录
② 打开extension
;这里启用memcache.dll扩展
extension=php_memcache.dll
③ 编程测试
代码(测试放入php的各种数据类型)
<?php

//1.实例化一个Memcache对象
$mem=new Memcache;

//2. 连接到指定的memcache中
$mem->connect("127.0.0.1",11211);
//0表示不压缩数据,如果使用压缩MEMCACHE_COMPRESSED
if(!$mem->add("name","shunping",0,30)){
echo "有哥们放入了";
}else{
echo "ok!";
}

//可以放入数值
if(!$mem->add("age",100,0,30)){
echo "age有哥们放入了";
}else{
echo "ok!";
}

//可以放入boolean

if(!$mem->set("ok",true,0,30)){
echo "ok有哥们放入了";
}else{
echo "ok!";
}

//放入数组

$arr1=array("aa"=>"北京","bb"=>"天津");

//对数组进行序列化,在网络传输的时候,为了保证,数据类型的不丢失,
//先序列化,再发生.
//$arr1=serialize($arr1);

$arr2=json_encode($arr1);
print_r($arr2);


$mem->add("arr",$arr1,MEMCACHE_COMPRESSED,100);

//对象

require "Person.class.php";

$person=new Person(10,"xiaoming");

$mem->add("per1",$person,MEMCACHE_COMPRESSED,100);


//取出
$per2=$mem->get("per1");

var_dump($per2);
echo "对象名字=".$per2->name;

//string, int,float, boolean  array object null resource


//不能把resource 类型放入到memcache
$con=mysql_connect("localhost","root","root");

echo "<br/>";
var_dump($con);

$mem->add("mylink",$con);



?>
.

代码: 用于获取各种数据
<?php

//获取
$mem=new Memcache;
$mem->connect("localhost",11211);
if($val=$mem->get("name")){
echo "val=$val";
}else{
echo "没有这个值";
}


/*获取数值*/
if($val=$mem->get("age")){
echo "age=$val";
}else{
echo "没有这个值";
}
/*布尔值*/
echo "<br/>";
$val=$mem->get("ok");

echo "ok=$val";

echo "<br/>";

$arr1=$mem->get("arr");

echo "<pre>";
var_dump($arr1);
echo "</pre>";

echo "<br/>对象的值..";
require "Person.class.php";
//取出
$per2=$mem->get("per1");
var_dump($per2);
echo "对象名字=".$per2->name;
echo "<br/>连接";
var_dump( $mem->get("mylink"));
?>

结论: //string, int,float, boolean  array object null resource 中除了 resource 不能存放,其它都可以.

分析memcache价值



补充: 关于如何使用多个memcached 缓存服务器.
<?php

$mem=new Memcache();

//如果我们网站,需要多个memached缓存系统.
//$mem->connect("localhost",11211); (立即向localhost的11211端口发出连接)
$mem->addServer("192.168.1.100",11211);//256 ->10m
$mem->addServer("192.168.1.200",11211);
$mem->addServer("192.168.1.222",11211);
//创建多个memcache服务使用.


$mem->add("name","zs",0,100);

?>



//使用socket来操作我们的memcached缓存系统.

代码:

<?php

require "memcached-client.php";

$mc = new memcached(array(
               'servers' => array('127.0.0.1:11211'), //如果有多个memcached服务器使用可以使用,号间隔添加
               'debug'   => false,
               'compress_threshold' => 10240,
               'persistant' => true));

$mc->add('key', '顺平');
// $mc->replace('key', 'some random string');
$val = $mc->get('key');

echo "key=".$val;
?>

面试题: 请说明memcached 机制:
1. 是c/s结构,使用简单文本通讯
2. 基于libevent处理并发
3. 是内存缓存
4. 基于客户端的分布式
5.
6. .


php程序(1. memcache 扩展  2. memcached 扩展 (php_memcached.dll), 3. 使用socket访问) ---->memcachd 缓存系统


 memcached 的细节
1. 生命周期, 是在add 数据的时候指定的.
2. 如何配置,将session数据,自动保存到memcached服务器中.

思路 : 在默认情况下 session 数据是放在文件中. c:/windows/temp

步骤:
① 在php.ini 文件中
;把session数据放入memcache
session.save_handler = memcache
;这里指定放到哪个memcached服务器
session.save_path = "tcp://127.0.0.1:11211"

使用
<?php
session_start();
$_SESSION['name']='xiaohong';
//现在我们希望把session数据放入到memcached缓存系统中.
echo session_id()."<br/>";
echo $_SESSION['name'];
?>

小结: 我们只需要在php.ini中作一个配置,然后再使用session时候,还是老规矩,只是这个时候,我们的session数据,已经放到memcached中

 memcache的安全性

windows 下,设置防火墙.

原理图:

linux下
iptables -a input -p 协议 -s 可以访问ip -dport 端口 -j ACCEPT


小结如何使用memcached 的因素:

--我自己的一个小结如何决定是否使用memcached
--如果是一个小网站,pv值不大,就不考虑使用memcache了
--变化频繁,查询频繁,但是不一定写入数据库(适合memcached)(用户在线状态.)
--变化频繁, 一变化就要入库[比如股票,金融.](不适合memcached)
--变化不频繁,查询频繁,不管如不入库,都比较适合memcache。(新浪的新闻频道)



分享到:
评论

相关推荐

    memcached笔记资料

    memcached笔记资料,配套视频:https://www.bilibili.com/list/474327672?sid=4486766&spm_id_from=333.999.0.0&desc=1

    memcached-笔记资料

    【标题】"memcached-笔记资料"涉及到的核心知识点是分布式内存缓存系统——Memcached,它是一个高性能、轻量级的缓存解决方案,主要用于减轻数据库的负载,提高Web应用的性能。 【描述】"memcached-笔记资料"暗示了...

    Memcached 源码剖析笔记

    memcached 源码剖析笔记和源码。 Memcached 是一个自由、源码开放、高性能、分布式内存对象缓存系统,目的在于过减轻数据库负载来使动态 Web 应用程序提速。

    Memcached 学习资料(memcached Memcached使用手册 Memcached源码剖析笔记)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用

    本篇学习笔记将重点介绍如何在Java环境中使用gwhalin提供的Memcached客户端进行开发。gwhalin的Memcached Java客户端是一个轻量级、高性能的库,使得Java开发者可以轻松地与Memcached服务器进行交互。 ### 一、...

    韩顺平 PHP Memcached缓存技术资料源码笔记图解PPT_Ady

    1. 连接Memcached服务器:使用`new Memcached()`创建实例,然后调用`addServer()`方法添加服务器地址和端口。 2. 存储数据:使用`set()`方法可以将键值对存储到缓存中,例如`$memcached-&gt;set('key', 'value', $...

    Memcached源码剖析笔记

    ### Memcached源码剖析知识点 #### 一、背景与概述 **Memcached**是一个高性能的分布式内存对象缓存系统,其主要目标是通过缓存数据和对象到内存中,从而减少对后端数据库的访问频率,进而提升动态Web应用程序的...

    Memcached源码剖析笔记.docx

    Memcached 源码剖析笔记 Memcached 是一个自由、开源、高性能、分布式内存对象缓存系统,旨在通过减轻数据库负载来使动态 Web 应用程序提速。下面是 Memcached 源码剖析笔记的知识点总结: 1. 背景 Memcached 的...

    memcached-笔记资料.rar

    标题 "memcached-笔记资料.rar" 暗示了这个压缩包包含的是关于 memcached 的学习资料,这是一款广泛使用的分布式内存对象缓存系统。它主要用于减轻数据库的负载,通过在内存中存储常用数据,提高应用程序的响应速度...

    Memcached源码剖析笔记.pdf

    《Memcached源码剖析笔记》是一份深入解析Memcached内部工作原理和技术细节的文档,旨在帮助读者理解这个高性能分布式内存对象缓存系统的设计与实现。Memcached被广泛应用于动态Web应用程序,通过缓存数据和对象,...

    Memcached源码剖析笔记_wrapper1

    **Memcached源码剖析笔记** **1. 背景** Memcached是一个高效且流行的分布式内存对象缓存系统,主要用于动态Web应用。它的主要目的是通过将数据和对象存储在内存中来减少对数据库的访问频率,从而提升应用程序的...

    memcached教程.PPT.笔记.软件

    **Memcached教程详解** Memcached是一款高性能、分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升网站性能。它通过将数据缓存在内存中,避免了反复读取数据库,从而显著提高了数据访问速度。在本教程...

    PHP安装memcached扩展笔记

    PHP安装memcached扩展笔记详细介绍了如何在PHP环境下安装memcached扩展以利用memcached服务进行高性能的键值缓存。以下为安装过程中的关键知识点: 1. 安装memcached服务端: - 在Linux环境下,可以使用yum命令...

Global site tag (gtag.js) - Google Analytics