memcache的使用: 目录 1、直接使用telnet远程协议连接,(类似于mysql客户端的黑窗口)......................... 4 2、使用php程序当成客户端,连接memcache要安装memcache的扩展。................ 7 六、把session数据给添加到memcache里面。............................................................... 13 5、memcache比较适合于存储哪些数据。................................................................ 16 一、memcache基本的介绍是一个高性能的分布式内存对象缓存系统。 和mysql比较,进行理解memcache (1)该软件是一个c/s架构, (2)mysql的数据是存储到哪里的?是存储到磁盘里面的。 memcache的数据是存储到内存里面。 (3)mysql的数据存储是,由数据库,数据表,数据的记录,存储数据是按照表的结构进行存储的。 memcache的数据存储格式是:key/value的格式,来存储的,相当于在内存里面有一张两列的哈希表。类似于php的里面的关联数组 key (键名) 值 比如我们要存储: name 小刚 age 12 email nihao@sohu.com 二、基本的原理:比如有一个查询系统,查询某个学生的信息: 三、安装软件(1)准备软件,该软件只有一个文件,为了方便管理,把该文件拷贝到和apache或mysql或php同一级目录下面。 (2)开始安装: 方式一:可以无需安装,进入到该文件所在的目录,直接在cmd下面运行memcahced,直接启动。 -p是指定端口号。 方式二:可以把该软件安装 成windows的一个服务,便于 管理。 步骤: 以管理员的方式,打开cmd(命令提示符),进入到memcached文件所在的目录。 可以使用memcahced.exe –h 查看帮助命令。 memcache –d install 开始安装: 安装完成后,要完成启动该服务, memcached –d start 查看是否启动成功,可以通过计算机管理里面的服务选项查看。 memcache的默认端口号是11211,可以通过查看端口,来判断是否开启该服务, 通过使用netstat –an命令,来查看当前计算机里面监听的服务。 memcached –d stop停止memcache的服务。 (3)在安装时,对应的一些参数设置。 比如设置,缓存的大小。 -p 监听的端口 -M 内存耗尽时返回错误,而不是删除项 -v 输出警告和错误信息。 -vv 打印客户端的请求和返回信息 -i 打印memcached和libevent的版权信息 四、软件操作1、直接使用telnet远程协议连接,(类似于mysql客户端的黑窗口)打开cmd进行输入: telnet ip地址(域名) 端口号 按回车 (1)设置数据,向memcache里面添加数据 添加数据: 语法: add 键名 0|1(是否压缩) 缓存周期 值的长度 [按回车,进行输入要添加的数据] 0表示不压缩,1表示要压缩 缓存周期:单位是秒, 值的长度:长度的单位和客户端有关,此处是字节。 注意:如果键已经存在,则添加失败。 修改数据: replace 语法格式和add是一样的。 注意:如果键不存在,则修改失败,只能修改已经 存在的键。 设置数据: set命令和add的语法是一样的。 如果使用set命令,如果键已经存在,则是完成修改,如果键不存在则是添加操作。 (2)获取数据 get 键名 (3)删除数据 delete 键名 flush_all 清空所有的数据, 可以设置某一个有效期, flush_all 秒数,在多少秒之后,清空所有的键。 (4)数据追加 append 在原有值的后面追加数据 preappend 在原有值的前面追加数据。 (4)自增和自减语法: incr 键名 数字 decr 秒杀系统, 一分钟开始抢商品,有100件商品, 执行代码:decr number 1该值大于0的则抢到成功, (5)查看当前状态的一个命令: 通过该stats命令能够获取,执行了多少次的get查询,有多少次能够使用get查询到数据,有多少次能够使用get查询失败,计算命中率, 计算命中率 get成功查询的次数/get的总的查询次数,通过命中率来判断memcache服务性能。
2、使用php程序当成客户端,连接memcache要安装memcache的扩展。(1)要准备memcache php的 扩展,在安装扩展时,要和php的版本一致。 (2)把对应的扩展拷贝到哪里?拷贝到php安装目录ext目录里面。 (3)打开php.ini文件,要开启该扩展,完成后,要重启apache, (4)测试,是否安装扩展成功,使用phpinfo();函数 3、php操作memcache.(1)实例化一个对象。 $mem = new Memcache(); (2)连接memcache,使用connect函数。 入门案例: (3)对存储的数据类型进行讨论。 php的数据类型:标量数据类型的存储方式。 获取的结果: php的标量类型在memcac he里面存储都是转换成字符串的形式来存储的。 php的数据类型:数组的形式。 在存储数组时,把数组序列化之后,存储到 memcache里面的,在取出数组数据时,自动给我们反序列化。数组的序列化和反序列化,是有add和get函数完成的, 无需我们自己干预。 memcache内部存储。 取出的数组数据: null值, 对象类型的数据的存储,和数组一样,在存储之前要序列化,在取出后,要反序列化。序列化也是自动完成的,无需我们干预。 对象数据: 对象数据也是序列化存储的,和数组一样的。在取出对象数据时,要有该对象类的声明。 资源类型:不要存储 到memcache里面,语法角度是没有问题的 ,但是在取出时,则类型变成int(0) 4、入门案例的使用。根据一个sql取出的数据,把sql取出的数据,给缓存到memcache里面,当下次再操作该sql语句的时候,则直接从memcache里面获取。核心思路:给sql做一个键。 <?php $mem = new Memcache(); $mem->connect('localhost',11210); //(1)要根据sql语句生成一个key $sql="select * from user limit 10"; $key = md5($sql);//构建存储到memcache里面的键。 //(2)根据该键从memcache里面取出数据, $data = $mem->get($key); //(3)要判断数据是否取出,如果取出,则直接使用该数据,如果取出失败则从数据库里面取出, //取出后,再把该数据写入到memcache 里面。 if(empty($data)){ echo 'a<br/>'; $conn = mysql_connect('localhost','root','root'); mysql_query('use php'); mysql_query('set names utf8'); $res = mysql_query($sql); $data = array(); while($row=mysql_fetch_assoc($res)){ $data[]=$row; } //要存储到memcache里面, $mem->add($key,$data,0,1200); } ?> 5、典型的一个案例应用2新闻列表页面:newslist.php 新闻详情页面:shownews.php 五、“分布式”缓存服务器的搭建可以使用多台memcache服务器一块协同工作, 使用原理: 思考:在取出数据是,如何取出? 存储原理:使用分布式存储算法,该算法,集成到php客户端的扩展里面的,我们自己无需干预, 我们使用分布式服务器,要取出数据时,操作方法,就和一台服务器一样,前提要和在存储数据时连接的服务器的个数和顺序要一致。 为什么要一致? 答:因为在存储数据是,要使用算法(取模算法) 比如:键的名字用数字来代替,使用3台memcache服务器。 如何来定位促成呢?使用取模算法, 假如键为34,和3取余数 ===1 就把该数据存储到第一台服务器上面来, 假如键为60 和3取余数,======0 就把该数据存储到第三台服务器上面来。 当取出键为34的数据,再和3取余数,====1,就去第一台服务器取出数据。 设置页面:
六、把session数据给添加到memcache里面。使用原理: (1)要在php.ini文件里面设置session文件的存储位置, session.save_handler=memcache
存储位置的设置可以为:files(默认的)users:用户自己定义的 memcache|redis (2)在php.ini文件中要设置session文件的存储路径, session.save_path=”tcp://localhost:11211”,可以使用逗号分割,指定多台memcache服务器。 比如:session.save_path=”tcp://192.168.10.1:11211,tcp://192.168.10.2:11210” 如果自己没有 权限修改,php.ini文件里面的配置,则可以使用ini_set();该函数在页面中进行配置。该配置值针对当前页面有效。 (3)如何存储session数据和如何取出session数据,和之前操作是一模一样的,该配置对用户操作是透明的。 session文件数据在memcache里面存储是以sessionid为键的。 七、memcache细节讨论1、缓存周期(有效期)缓存周期的设置有两种方式: 如果缓存周期设置为0表明此数据永不过期 第一种使用:秒数,最大不能超过30天,即2592000秒, 第二种使用:使用时间戳,该时间戳是到的哪个时间点。比如我们要把一个数据缓存60天, $mem->add($key,$value,0,time()+60*24*3600) 2、惰性删除,就是说,缓存的数据,到期后,不会自动删除,当get数据的时候,查看有没有到期,如果到期了,则再删除该数据。 memcache不会开启进程来监视键是否过期,省memcache的资源,也 省cpu. 3、Least Recently Used(LRU)最近 最少使用原则, 当前存储的数据的在memcache里面空间已经占满后,则memcache会把不活跃(get或set次数比较少的)的数据(不管是否到期)清除,让新的数据给存储进来。 4、安全性memcache定位就是做数据的缓存的,不是数据的持久存储的,因此没有做一些用户的验证,目的提高连接速度,发挥自己的独特功能。 -l ip地址。设置监听的ip地址。 -l后面的ip地址是服务器自己的某个ip地址,不是客户端的ip地址。 memcahe该软件本身没有提供一些安全机制,如果要限制使用,则只能在操作系统的层面来解决,比如window系统、安装防火墙的软件,在linux下面使用iptables,seclinux(安全机制) 5、memcache比较适合于存储哪些数据。存储的数据的特点: 访问比较频繁, 安全性不高,丢失无所谓, 修改比较频繁的数据,比如一些用户的在线状态, |
|