memcached在widdows环境下的详细剖析
2016-10-10 20:43
190 查看
更多内容清访问www.phptuku.com
一.memcached 基本概念
Memcached是一个高性能的分布式的内存对象缓存系统,用于减少数据库负载,提升性能。包括服务端和客户端。目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内存里维护一个统一的巨大的hash表,通过自己的算法开维护数据的操作。它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
二.memcached的安装(Windows下的安装)
下载memcached软件,http://memcached.org/download
将memcached软件拷贝到某个目录,最好放在php开发环境目录下,与apache,php,mysql同级目录,便于管理
安装 memcached –d install [卸载使用 memcached -d uninstall
启动 memcached 服务
(1)直接通过界面启动该服务
(2)在控制台下启动 memcached –d start
(3)查看memcached 服务是否启动成功,可使用命令: memcached -h ,出现如下表示成功
参数说明:
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
三.telnet操作memcached(CURD)
登录到telnet,连接到memcached服务,命令窗口下输入telnet 127.0.0.1 11211,
回车出现如下,输入任何东西都不会显现出来,看不到任何东西,这是因为Win7 中将telnet 回显功能关闭了
对当前框同时按下 “CTRL ”和“]” 健,将进入如下页面:
输入 “set localecho”,开启回显telnet回显功能
按下Enter键,进入telnet 交互界面,这时候用户可以看到自己的输入了
telnet写入memcache命令格式
参数说明:
command name:set/add/replace
key:查找关键字
flags:整型参数,客户机使用它存储关于键值对的额外信息
exptime:该数据的存活时间(以秒为单位,0 表示永远)
bytes:存储字节数
data block:存储的数据块(可直接理解为key-value结构中的value)
三.PHP操作memcached(CURD)
memcache扩展
memcached扩展
Sokket套接字操作,memcached-client.php
1.如何使用php操作memcached服务
(1)把php_memcache.dll文件拷贝到php的ext下
注意:不同版本的php 所使用的 php_memcache.dll 的版本不一样
(2)修改php.ono配置,加载php_memcache.dll文件,extension=php_memcache.dll
(3)重新启动apache
(4)写代码完成curd操作
2.如何使用PHP源码来操作memcached服务
如果管理员不让我们去加载 memcache.dll 文件,我们可以直接通过源码操作.关闭扩展.
3.memcached机制深入了解
①基于c/s架构 ,协议简单
c/s架构,此时memcached为服务器端,我们可以使用如PHP,c/c++等程序连接memcached服务器。
memcached的服务器客户端通信并不使用XML等格式,而使用简单的基于文本行的协议。因此,通过telnet也能在memcached上保存数据、取得数据
②基于libevent的事件处理
libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:Windows/Linux/BSD/Solaris 等操作系统的的事件处理。
Memcached 使用libevent来进行网络并发连接的处理,能够保持在很大并发情况下,仍旧能够保持快速的响应能力。
③内置内存存储方式
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
④基于客户端的分布式
memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。
总结:
1. mem服务的数据不是同步, 数据是分布的
2. 把什么数据放入到哪个memcached是由客户端的mem对象决定
3. 当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后才去决定连接哪个mem服务,因此当你大量加入服务器到连接池,没有多余开销
4.memcached细节
① 生命周期
从数据放入mem开始计时,直到时间到了,就销毁, 如果时间为0, 则表示不过期.
memcache的数据被销毁的情况如下:
时间到
重启memcached服务
重启memcached服务所在的机器
delete / flush 销毁数据
② 如何把session数据放入到memcached服务中.
步骤:
修改php.ini的配置文件
如下:
;[sesson.save_handler 有user|files|memcache]
session.save_handler = memcache
session.save_path = “tcp://127.0.0.1:11211”
③ 测试一把,重启apache
测试ok
一.memcached 基本概念
Memcached是一个高性能的分布式的内存对象缓存系统,用于减少数据库负载,提升性能。包括服务端和客户端。目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内存里维护一个统一的巨大的hash表,通过自己的算法开维护数据的操作。它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
二.memcached的安装(Windows下的安装)
下载memcached软件,http://memcached.org/download
将memcached软件拷贝到某个目录,最好放在php开发环境目录下,与apache,php,mysql同级目录,便于管理
安装 memcached –d install [卸载使用 memcached -d uninstall
启动 memcached 服务
(1)直接通过界面启动该服务
(2)在控制台下启动 memcached –d start
(3)查看memcached 服务是否启动成功,可使用命令: memcached -h ,出现如下表示成功
参数说明:
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
三.telnet操作memcached(CURD)
登录到telnet,连接到memcached服务,命令窗口下输入telnet 127.0.0.1 11211,
回车出现如下,输入任何东西都不会显现出来,看不到任何东西,这是因为Win7 中将telnet 回显功能关闭了
对当前框同时按下 “CTRL ”和“]” 健,将进入如下页面:
输入 “set localecho”,开启回显telnet回显功能
按下Enter键,进入telnet 交互界面,这时候用户可以看到自己的输入了
telnet写入memcache命令格式
<command name> <key> <flags> <exptime> <bytes> <data block>
参数说明:
command name:set/add/replace
key:查找关键字
flags:整型参数,客户机使用它存储关于键值对的额外信息
exptime:该数据的存活时间(以秒为单位,0 表示永远)
bytes:存储字节数
data block:存储的数据块(可直接理解为key-value结构中的value)
三.PHP操作memcached(CURD)
php操作memcached有以下三种形式:
memcache扩展
memcached扩展
Sokket套接字操作,memcached-client.php
1.如何使用php操作memcached服务
(1)把php_memcache.dll文件拷贝到php的ext下
注意:不同版本的php 所使用的 php_memcache.dll 的版本不一样
(2)修改php.ono配置,加载php_memcache.dll文件,extension=php_memcache.dll
(3)重新启动apache
(4)写代码完成curd操作
<?php //创建一个mem对象实例 $mem=new Memcache; if(!$mem->connect("127.0.0.1",11211)){ die('连接失败!'); } //增加 //1.增加一个字串 if($mem->set('key1',"beijing",MEMCACHE_COMPRESSED,60)){ echo '添加ok'; } //2.添加数值 if($mem->set('key1',100,MEMCACHE_COMPRESSED,60)){ echo '添加ok'; } //3.添加数组 //在添加数组是,根据需要. 希望序列号放入 , //serialize<=>unserialize, 如果根据需要,也可以json_encode <=> json_decode $arr=array("bj",'tj'); if($mem->set('key1',$arr,MEMCACHE_COMPRESSED,time()+31*3600*24)){ echo '添加数组ok99111'; } //4.添加对象 class Dog{ public $name; public $age; public function __construct($name,$age){ $this->name=$name; $this->age=$age; } } $dog1=new Dog('小狗',50); if($mem->set('key1',$dog1,MEMCACHE_COMPRESSED,60)){ echo '添加对象ok'; } //5.添加null 布尔值 if($mem->set('key1',false,MEMCACHE_COMPRESSED,60)){ echo '添加布尔ok'; } //6. 资源类型放入. $con=mysql_connect("127.0.0.1","root","root"); if(!$con){ die('连接数据库失败'); } var_dump($con); echo "<br/>"; if($mem->set('key1',$con,MEMCACHE_COMPRESSED,60)){ echo '添加资源ok'; } //查询 $val=$mem->get('key1'); var_dump($val); //修改 //可以使用replace if($mem->replace("key11",'hello',MEMCACHE_COMPRESSED,60)){ echo 'replace ok'; }else{ echo 'replace no ok'; } //删除 echo "<br/>"; if($mem->delete('key14')){ echo 'key14 删除'; }else{ echo 'key14不存在'; }
2.如何使用PHP源码来操作memcached服务
如果管理员不让我们去加载 memcache.dll 文件,我们可以直接通过源码操作.关闭扩展.
<?php require_once 'memcached-client.php'; $mc = new memcached(array( 'servers' => array('127.0.0.1:11211'), //连接的memcacheip和端口 'debug' => false, //是否debug 'compress_threshold' => 10240, /*最大压缩*/ 'persistant' => true)); /*是否是持久连接*/ $mc->set('key1', array('some', 'array')); // $mc->replace('key', 'some random string'); $val = $mc->get('key1'); var_dump($val); //修改 $mc->replace('key1', "北京"); $val = $mc->get('key1'); var_dump($val); //删除 $mc->delete('key1'); $val = $mc->get('key1'); echo "删除后"; var_dump($val);
3.memcached机制深入了解
①基于c/s架构 ,协议简单
c/s架构,此时memcached为服务器端,我们可以使用如PHP,c/c++等程序连接memcached服务器。
memcached的服务器客户端通信并不使用XML等格式,而使用简单的基于文本行的协议。因此,通过telnet也能在memcached上保存数据、取得数据
②基于libevent的事件处理
libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:Windows/Linux/BSD/Solaris 等操作系统的的事件处理。
Memcached 使用libevent来进行网络并发连接的处理,能够保持在很大并发情况下,仍旧能够保持快速的响应能力。
③内置内存存储方式
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
④基于客户端的分布式
memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。
<?php //我的电脑上有两个memcahced服务. $mem=new Memcache; $mem->addServer('127.0.0.1',11211); $mem->addServer('127.0.0.1',9999); $mem->addServer('127.0.0.1',9998); $mem->addServer('127.0.0.1',9997); $mem->addServer('127.0.0.1',9996); //这里注意,把key1,放入到 11211端口的mem还是 //9999 端口的mem就不要我们操心,有$mem对象本身维护. if($mem->set('key1','hello',MEMCACHE_COMPRESSED,300)){ echo 'add ok!'; } if($mem->set('key2','hello2',MEMCACHE_COMPRESSED,300)){ echo 'add ok!'; } if($mem->set('key3','hello3',MEMCACHE_COMPRESSED,300)){ echo 'add ok!'; }
<?php //如何从多个mem中取出你的key? $mem=new Memcache; $mem->addServer('127.0.0.1',11211); $mem->addServer('127.0.0.1',9999); $val=$mem->get('key1'); echo '程序中取出分布的值='.$val;
总结:
1. mem服务的数据不是同步, 数据是分布的
2. 把什么数据放入到哪个memcached是由客户端的mem对象决定
3. 当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后才去决定连接哪个mem服务,因此当你大量加入服务器到连接池,没有多余开销
4.memcached细节
① 生命周期
从数据放入mem开始计时,直到时间到了,就销毁, 如果时间为0, 则表示不过期.
memcache的数据被销毁的情况如下:
时间到
重启memcached服务
重启memcached服务所在的机器
delete / flush 销毁数据
② 如何把session数据放入到memcached服务中.
步骤:
修改php.ini的配置文件
如下:
;[sesson.save_handler 有user|files|memcache]
session.save_handler = memcache
session.save_path = “tcp://127.0.0.1:11211”
③ 测试一把,重启apache
测试ok
相关文章推荐
- 高性能的分布式内存缓存服务器系统——memcached核心原理详细剖析
- linux配置java环境变量(详细)
- Android入门:搭建环境、工程目录剖析、Activity生命周期
- hadoop环境搭建图文剖析
- Eclipse-环境配置-详细版
- 【操作系统学习 01】MIT xv6操作系统环境配置及编译(详细过程+部分问题解决方法)
- linux配置java环境变量(详细)
- Linux环境安装Mysql数据库(手工+自动两种 详细版)
- Android入门教程 Android开发环境搭建【详细教程】
- Windows+QT+Eclipse+MinGW搭建QT开发环境详细教程
- 详细剖析 SurfaceView ! Callback以及SurfaceHolder!!
- memcached完全剖析–1. memcached的基础
- 详细教你搭建代码环境
- Android实战(一)------Myeclipse10搭建android运行环境图文详细步骤--------SDK的安装配置
- Centos系统下Lamp环境的快速搭建(超详细)
- Android自定义属性详细剖析(一)
- memcached全面剖析–4. memcached的分布式算法
- moodle平台安装及环境配置(包括安装过程详细截图)
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
- Linux下JAVA开发环境的搭建(JDK+Eclipse+Tomcat详细)