我学院:php的Memcache方法介绍及应用实例
- 格式:doc
- 大小:121.00 KB
- 文档页数:17
PHP memcache实现消息队列实例现在memcache在服务器缓存应用比较广泛,下面我来介绍memcache实现消息队列等待的一个例子,有需要了解的朋友可参考。
memche消息队列的原理就是在key上做文章,用以做一个连续的数字加上前缀记录序列化以后消息或者日志。
然后通过定时程序将内容落地到文件或者数据库。
php实现消息队列的用处比如在做发送邮件时发送大量邮件很费时间的问题,那么可以采取队列。
方便实现队列的轻量级队列服务器是:star ling支持memcache协议的轻量级持久化服务器htt ps:///starling/starlingBeanstalkd轻量、高效,支持持久化,每秒可处理3000左右的队列/beanstalkd/php中也可以使用memcache/memcached来实现消息队列。
代码如下复制代码<?php/*** Memcache 消息队列类*/class QMC {const PREFIX = 'ASDFASDFFWQKE';/*** 初始化mc* @staticvar string $mc* @return Memcache*/static private function mc_init() {static $mc = null;if (is_null($mc)) {$mc = new Memcache;$mc->connect('127.0.0.1', 11211);}return $mc;}/*** mc 计数器,增加计数并返回新的计数* @param string $key 计数器* @param int $offset 计数增量,可为负数.0为不改变计数* @param int $time 时间* @return int/false 失败是返回false,成功时返回更新计数器后的计数*/static public function set_counter( $key, $offset, $time=0 ){$mc = self::mc_init();$val = $mc->get($key);if( !is_numeric($val) || $val < 0 ){$ret = $mc->set( $key, 0, $time );if( !$ret ) return false;$val = 0;}$offset = intval( $offset );if( $offset > 0 ){return $mc->increment( $key, $offset );}elseif( $offset < 0 ){return $mc->decrement( $key, -$offset );}return $val;}/*** 写入队列* @param string $key* @param mixed $value* @return bool*/static public function input( $key, $value ){$mc = self::mc_init();$w_key = self::PREFIX.$key.'W';$v_key = self::PREFIX.$key.self::set_counter($w_key, 1); return $mc->set( $v_key, $value );}/*** 读取队列里的数据* @param string $key* @param int $max 最多读取条数* @return array*/static public function output( $key, $max=100 ){$out = array();$mc = self::mc_init();$r_key = self::PREFIX.$key.'R';$w_key = self::PREFIX.$key.'W';$r_p = self::set_counter( $r_key, 0 );//读指针$w_p = self::set_counter( $w_key, 0 );//写指针if( $r_p == 0 ) $r_p = 1;while( $w_p >= $r_p ){if( --$max < 0 ) break;$v_key = self::PREFIX.$key.$r_p;$r_p = self::set_counter( $r_key, 1 );$out[] = $mc->get( $v_key );$mc->delete($v_key);}return $out;}}/**使用方法:QMC::input($key, $value );//写入队列$list = QMC::output($key);//读取队列*/?>基于PHP共享内存实现的消息队列:代码如下复制代码<?php/*** 使用共享内存的PHP循环内存队列实现* 支持多进程, 支持各种数据类型的存储* 注: 完成入队或出队操作,尽快使用unset(), 以释放临界区** @author wangbinandi@* @created 2009-12-23*/class ShmQueue{private $maxQSize = 0; // 队列最大长度private $front = 0; // 队头指针private $rear = 0; // 队尾指针private $blockSize = 256; // 块的大小(byte)private $memSize = 25600; // 最大共享内存(byte)private $shmId = 0;private $filePtr = './shmq.ptr';private $semId = 0;public function __construct(){$shmkey = ftok(__FILE__, 't');$this->shmId = shmop_open($shmkey, "c", 0644, $this->memSize ); $this->maxQSize = $this->memSize / $this->blockSize;// 申?一个信号量$this->semId = sem_get($shmkey, 1);sem_acquire($this->semId); // 申请进入临界区$this->init();}private function init(){if ( file_exists($this->filePtr) ){$contents = file_get_contents($this->filePtr);$data = explode( '|', $contents );if ( isset($data[0]) && isset($data[1])){$this->front = (int)$data[0];$this->rear = (int)$data[1];}}}public function getLength(){return (($this->rear - $this->front + $this->memSize) % ($this->memSize) )/$this->blockSize; }public function enQueue( $value ){if ( $this->ptrInc($this->rear) == $this->front ){ // 队满return false;}$data = $this->encode($value);shmop_write($this->shmId, $data, $this->rear );$this->rear = $this->ptrInc($this->rear);return true;}public function deQueue(){if ( $this->front == $this->rear ){ // 队空return false;}$value = shmop_read($this->shmId, $this->front, $this->blockSize-1); $this->front = $this->Inc($this->front);return $this->decode($value);}private function ptrInc( $ptr ){return ($ptr + $this->blockSize) % ($this->memSize);}private function encode( $value ){$data = serialize($value) . "__eof";echo '';echo strlen($data);echo '';echo $this->blockSize -1;echo '';if ( strlen($data) > $this->blockSize -1 ){throw new Exception(strlen($data)." is overload block size!"); }return $data;}private function decode( $value ){$data = explode("__eof", $value);return unserialize($data[0]);}public function __destruct(){$data = $this->front . '|' . $this->rear;file_put_contents($this->filePtr, $data);sem_release($this->semId); // 出临界区, 释放信号量}}/*// 进队操作$shmq = new ShmQueue();$data = 'test data';$shmq->enQueue($data);unset($shmq);// 出队操作$shmq = new ShmQueue();$data = $shmq->deQueue();unset($shmq);*/?>对于一个很大的消息队列,频繁进行进行大数据库的序列化和反序列化,有太耗费。
php运⽤memcache的完整实例前⾔memcache实际上也是⼀个服务器,不过他是存在内存⾥⾯的不是存在磁盘⾥⾯的优点速度很快缺点不能永久存储,存放⼤⼩受内存限制没有⽤户名跟防⽕墙,mysql有不过缓存⾥⾯也不会存储重要信息什么的,速度快就很ok,不过受内存限制有点伤,毕竟内存条⽐较贵memcache如何安装以window举例,将.exe⽂件放在c盘下,ctrl+r 打开运⾏,cmd进⼊dos,找到memcache的根⽬录下运⾏指令memcached.exe -d install 进⾏安装卸载就是uninstall如果安装成功运⾏指令memcached -h 查看⼀下启动memcache 运⾏指令memcached.exe -d start 停⽌就是stop去任务管理器看⼀下启动了没有,基本没有啥踩雷的地⽅。
启动好之后,咱们就可以运⾏memcache了。
memcache的默认端⼝号是11211,如果你想更改端⼝号让别⼈查不到的话,需要去注册表regedit找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server将这个值改为"c:\memcached\memcached.exe" -p 20000 -d runservice 即可,这样的话访问得按照20000的端⼝访问了然后我这⾥⽤的telnet来操作(也可以下载secureCRT来弄)运⾏指令: telnet 127.0.0.1 11211(如果改端⼝号了,这⾥同步)先打⼏个空格再说在memcache服务器⾥⾯的操作暂时不说了,主要说下在php⾥⾯的操作(今天他不是主⾓),将php_memcache.dll放在php.ini下,可以ctrl+f寻找extension,然后在最后加上 * extension=php_memcache.dll*然后 phpinfo查看⼀下有没有问题$me = new Memcache();var_dump($me);这样就说明创建了memcache缓存对象了当我们客户端访问服务器的时候,如果每⼀次都从数据库读取数据的话,如果访问量⽐较⼤的话,就卡的很,主要是如果优化⽐较费钱,这种针对长期或者⼀段时间不会更改的⽹页的内容,如果是实时的话例如秒杀什么的需要⾼并发或者是页⾯⼀直在更新,还是不能⽤缓存机制的好。
phpmemcached的实例⽤法详解1、启动Memcached。
2、使⽤ps命令查看⼀下运⾏状态。
3、创建⼀个Memcached对象。
4、通过add和get⽅法添加数据即可。
记得⼀定要先启动Memcached哦![root@localhost ~]# /usr/bin/memcached -d -l 127.0.0.1 -p 11211 -m 150 -u root-d 守护进程模式(退出终端窗⼝之后使程序还在运⾏),-l 指定IP地址127.0.0.1 ,-p 指定端⼝号11211,-m 为memcached分配多少内存(单位:M),-u 指定使⽤哪个⽤户启动memcached使⽤ps命令查看⼀下运⾏状态:[root@localhost ~]# ps -ef | grep memcached知识点扩充:⼀、memcached 简介memcached是⾼性能的分布式内存缓存服务器。
⼀般的使⽤⽬的是,通过缓存数据库查询结果,减少数据库访问次数,以提⾼动态Web应⽤的速度、提⾼可扩展性。
它可以应对任意多个连接,使⽤⾮阻塞的⽹络IO。
由于它的⼯作机制是在内存中开辟⼀块空间,然后建⽴⼀个HashTable,Memcached⾃管理这些HashTable。
⼆、memcached 安装⾸先是下载 memcached 了,⽬前最新版本是 1.1.12,直接从官⽅⽹站即可下载到 memcached-1.1.12.tar.gz。
除此之外,memcached ⽤到了 libevent,我下载的是 libevent-1.1a.tar.gz。
接下来是分别将 libevent-1.1a.tar.gz 和 memcached-1.1.12.tar.gz 解开包、编译、安装:# tar -xzf libevent-1.1a.tar.gz # cd libevent-1.1a# ./configure --prefix=/usr# make# make install# cd .. # tar -xzfmemcached-1.1.12.tar.gz# cd memcached-1.1.12 # ./configure --prefix=/usr# make# make install安装完成之后,memcached 应该在 /usr/bin/memcached。
使用Memcache在PHP中调试方法的介绍及应用如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce。
首先我们必须要安装,接下来如何使用memcache,在这里介绍下在linux下安装和windows下安装如下及配置:一、linux下的Memcache安装:1.下载memcache的linux版本,注意memcached 用libevent 来作事件驱动,所以要先安装有libevent。
2. 安装pecl::memcache。
用pecl 命令行工具安装:pecl install memcache或直接从源码安装:phpize./configuremakemake install二、Windows下的Memcache安装:1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached2. 在终端(也即cmd命令界面)下输入‘c:\memcached\memcached.exe -d install’安装3. 再输入:‘c:\memcached\memcached.exe -d start’启动。
NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。
这样服务器端已经安装完毕了。
4.下载/ext.php/php_memcache.dll,请自己查找对应的php版本的文件5. 在C:\winnt\php.ini 加入一行‘extension=php_memcache.dll’6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!三、memcached的基本设置:-p 监听的端口-l 连接的IP地址, 默认是本机-d start 启动memcached服务-d restart 重起memcached服务-d stop|shutdown 关闭正在运行的memcached服务-d install 安装memcached服务-d uninstall 卸载memcached服务-u 以的身份运行(仅在以root运行的时候有效)-m 最大内存使用,单位MB。
memorycache 用法[memorycache 用法]本文将详细介绍memorycache 的用法和操作步骤,诸如何创建、读写及删除缓存等等。
1. 什么是memorycache?MemoryCache 是 .NET Framework 中的一个缓存类,它提供了轻量级的内存缓存功能。
通过MemoryCache,我们可以将数据保存在内存中,以提高应用程序的性能和响应速度。
MemoryCache 是线程安全的,可以在多个线程中读取和写入缓存数据。
2. 如何创建MemoryCache?要创建一个MemoryCache 实例,我们可以使用以下步骤:using System.Runtime.Caching;...MemoryCache memoryCache = MemoryCache.Default;这将创建一个名为"Default" 的MemoryCache 实例,它是全局静态实例,可以在应用程序中共享。
我们也可以创建自定义的MemoryCache 实例,方式如下:var cacheSettings = new NameValueCollection{{ "CacheMemoryLimitMegabytes", "200" }, 设置缓存限制为200MB { "PhysicalMemoryLimitPercentage", "50" } 设置缓存使用物理内存的百分比上限为50%};MemoryCache memoryCache = new MemoryCache("CustomCache", cacheSettings);这将创建一个名为"CustomCache" 的自定义MemoryCache 实例,我们可以根据需求调整缓存限制和使用内存的百分比上限。
3. 如何添加和读取缓存数据?下面是向MemoryCache 添加和读取缓存数据的基本步骤:string key = "CacheKey"; 缓存键string value = "CacheValue"; 缓存值添加缓存数据memoryCache.Add(key, value, DateTimeOffset.Now.AddMinutes(10));读取缓存数据object cachedValue = memoryCache.Get(key);在添加缓存数据时,我们需要指定一个缓存键、缓存值以及过期时间。
memcache 用法摘要:1.简介2.Memcache的安装与配置3.Memcache的使用方法4.Memcache的数据类型5.Memcache的应用场景6.Memcache的优缺点7.总结正文:Memcache是一款高性能的分布式内存对象缓存系统,主要用于提高网站访问速度和减轻服务器负载。
它通过将热点数据存储在内存中,以减少对数据库的访问次数,从而提高网站性能。
1.简介Memcache是一个高性能的分布式内存对象缓存系统,主要用于提高网站访问速度和减轻服务器负载。
它通过将热点数据存储在内存中,以减少对数据库的访问次数,从而提高网站性能。
Memcache支持多种数据类型,包括字符串、整数、浮点数等。
2.Memcache的安装与配置要使用Memcache,首先需要在服务器上安装Memcache服务端。
安装完成后,需要对Memcache进行配置,包括设置内存大小、连接数等参数。
配置完成后,启动Memcache服务。
3.Memcache的使用方法Memcache的使用方法主要包括以下几个步骤:(1)连接Memcache服务器:使用PHP的Memcache扩展库,通过`memcache_connect()`函数连接到Memcache服务器。
(2)设置缓存数据:使用`memcache_set()`函数将数据存储到Memcache中。
(3)获取缓存数据:使用`memcache_get()`函数从Memcache中获取数据。
(4)删除缓存数据:使用`memcache_delete()`函数从Memcache中删除数据。
(5)清空缓存:使用`memcache_clear_cache()`函数清空Memcache 中的所有数据。
4.Memcache的数据类型Memcache支持多种数据类型,包括字符串、整数、浮点数等。
此外,Memcache还支持数据结构,如数组、链表等。
5.Memcache的应用场景Memcache主要应用于以下场景:(1)缓存数据库查询结果:将经常访问的数据从数据库中取出,存储到Memcache中,以减少对数据库的访问次数。
PHP数据库操作⼆:memcache⽤法分析本⽂实例讲述了PHP数据库操作之memcache⽤法。
分享给⼤家供⼤家参考,具体如下:在⼀个⾼并发的web应⽤中,数据库存取瓶颈⼀直是个⼤问题,⼀旦达到某个极限,数据库很容易崩溃,但是如果我们把常⽤的数据放到内存中,在需要的时候从内存中取,不光读取速度快,⽽且节约数据库IO。
memcache简介Memcache是⼀个⾼性能的分布式的内存对象缓存系统,通过在内存⾥维护⼀个统⼀的巨⼤的hash表,它能够⽤来存储各种格式的数据,包括图像、视频、⽂件以及数据库检索的结果等。
简单的说就是将数据调⽤到内存中,然后从内存中读取,从⽽⼤⼤提⾼读取速度。
memcache的mem是内存(memory),cache是缓存,结合是内存缓存的意思。
我们应⽤memcache时,读取数据先从memcache 内读取,若查找不到再去数据库⾥查找,并将数据存⼊memcache,待下次查找时便能轻易找到。
需要注意:memcache是内存型的数据库,因为内存的关闭释放的特性,memcache也⽆法持久化存储内容; memcache内部是分块存储,所以⼤于1M的数据也⽆法存储。
memcache依赖libevent库,安装前需确认已经安装了libevent库。
memcache是⼀个轻量级的内存型数据库,只⽀持key-value型的存储。
memcache中没有关于⽤户,密码的设置,所以在配置时要配置防⽕墙的端⼝限制连接,以达到安全的⽬的。
使⽤repcached也能轻易实现memcache的单master单slave主从复制。
memcache的应⽤场景存储⼤量不需要持久存储或数据库内已存在不会变动的数据。
读取数据⾮常频繁数据,要求⼩于1M。
数据类型简单的key-value型数据。
计算好的结果和渲染后的⽹页模板⽂件。
因其原⼦递增性,可以⽤来计数。
因为可以设置数据过期时间的特性,存储期限数据。
不过需要注意,memcache会在分配的内存不⾜时以最近最少使⽤原则(LRU)重⽤内存,可能会导致信息提前被删除。
PHP教程:php操作memcached⽅法实例1⾸先建⽴Clsss类⽂件memcached.class.php<?phpclass Memcacheds{//声明静态成员变量 private static $m = null;private static $cache = null;public function __construct() {self::$m = new Memcached();self::$m->addServer('127.0.0.1','11211'); //写⼊缓存地址,port }//为当前类创建对象 private static function Men(){self::$cache = new Memcacheds();return self::$m;}/** 加⼊缓存数据* @param string $key 获取数据唯⼀key* @param String||Array $value 缓存数据* @param $time memcache⽣存周期(秒)*/ public static function setMen($key,$value,$time){self::Men()->set($key,$value,$time);}/** 获取缓存数据* @param string $key* @return */ public static function getMen($key){return self::Men()->get($key);}/** 删除相应缓存数据* @param string $key* @return */ public static function delMen($key){self::Men()->delete($key);}/** 删除全部缓存数据*/ public static function delAllMen(){self::Men()->flush();}/** 删除全部缓存数据*/ public static function menStatus(){return self::Men()->getStats();}}?>2使⽤⽅法实例//引⼊类⽂件require dirname(__FILE__).'/memcached.class.php'; function Get_memcached($str,$key,$time){$key = md5($key);Memcacheds::setMen($key,$str,$time); //写⼊缓存$get = Memcacheds::getMen($key); //读取缓存return $get;}echo function Get_memcached('data','key',3600);希望本⽂所述对⼤家的php程序设计有所帮助。
PHP企业级应用之常见缓存技术篇作者: cnblogs20112011来源: 博客园发布时间: 2011-01-28 16:07 阅读: 33 次原文链接全屏阅读[收藏]编辑点评:本文主要讲解PHP企业级应用之常见缓存技术,从基本的PHP缓存概念到技术代码的实现都深入做了解读。
数据缓存:这里所说的数据缓存是指数据库查询缓存。
普遍缓存技术数据缓存:这里所说的数据缓存是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。
用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。
举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。
页面缓存:每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。
(模板引擎和网上常见的一些缓存类通常有此功能)时间触发缓存:检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。
内容触发缓存:当插入数据或更新数据时,强制更新缓存。
静态缓存:这里所说的静态缓存是指静态化,直接生成HTML或xml等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。
以上内容是代码级的解决方案,我直接CP别的框架,也懒得改,内容都差不多,很容易就做到,而且会几种方式一起用,但下面的内容是服务器端的缓存方案,非代码级的,要有多方的合作才能做到内存缓存:Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
Memcache所有⽅法及参数详解memcache函数所有的⽅法列表如下:参考/manual/zh/function.Memcache-add.phpMemcache::add - 添加⼀个值,如果已经存在,则返回falseMemcache::addServer - 添加⼀个可供使⽤的服务器地址Memcache::close - 关闭⼀个Memcache对象Memcache::connect - 创建⼀个Memcache对象memcache_debug - 控制调试功能Memcache::decrement - 对保存的某个key中的值进⾏减法操作Memcache::delete - 删除⼀个key值Memcache::flush - 清除所有缓存的数据Memcache::get - 获取⼀个key值Memcache::getExtendedStats - 获取进程池中所有进程的运⾏系统统计Memcache::getServerStatus - 获取运⾏服务器的参数Memcache::getStats - 返回服务器的⼀些运⾏统计信息Memcache::getVersion - 返回运⾏的Memcache的版本信息Memcache::increment - 对保存的某个key中的值进⾏加法操作Memcache::pconnect - 创建⼀个Memcache的持久连接对象Memcache::replace -对⼀个已有的key进⾏覆写操作Memcache::set - 添加⼀个值,如果已经存在,则覆写Memcache::setCompressThreshold - 对⼤于某⼀⼤⼩的数据进⾏压缩Memcache::setServerParams - 在运⾏时修改服务器的参数Memcache::add⽤法bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )说明:如果key不存在的时候,使⽤这个函数来存储var的值。
使用Memcache在PHP中调试方法的介绍及应用如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce。
首先我们必须要安装,接下来如何使用memcache,在这里介绍下在linux下安装和windows下安装如下及配置:一、linux下的Memcache安装:1.下载memcache的linux版本,注意memcached 用libevent 来作事件驱动,所以要先安装有libevent。
2. 安装pecl::memcache。
用pecl 命令行工具安装:pecl install memcache或直接从源码安装:phpize./configuremakemake install二、Windows下的Memcache安装:1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached2. 在终端(也即cmd命令界面)下输入‘c:\memcached\memcached.exe -d install’安装3. 再输入:‘c:\memcached\memcached.exe -d start’启动。
NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。
这样服务器端已经安装完毕了。
4.下载/ext.php/php_memcache.dll,请自己查找对应的php版本的文件5. 在C:\winnt\php.ini 加入一行‘extension=php_memcache.dll’6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!三、memcached的基本设置:-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 显示帮助四、php.ini中的配置:[Memcache]一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
是否在遇到错误时透明地向其他服务器进行故障转移。
memcache.allow_failover = On接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。
memcache.max_failover_attempts = 20数据将按照此值设定的块大小进行转移。
此值越小所需的额外网络传输越多。
如果发现无法解释的速度降低,可以尝试将此值增加到32768。
memcache.chunk_size = 8192连接到memcached服务器时使用的默认TCP端口。
memcache.default_port = 11211控制将key映射到server的策略。
默认值"standard"表示使用先前版本的老hash策略。
设为"consistent"可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。
memcache.hash_strategy = "standard";控制将key映射到server的散列函数。
默认值"crc32"使用CRC32算法,而"fnv"则表示使用FNV-1a算法。
FNV-1a比CRC32速度稍低,但是散列效果更好。
memcache.hash_function = "crc32"memcache也可以作为session的存储模块,具体参看:memcache PHP 的session.save_handler.1. $memcache = new Memcache;2. $memcache->connect('localhost', 11211) or die ("Could not connect");3.4. $version = $memcache->getVersion();5. echo "Server's version: ".$version."<BR>\n";6.7. $tmp_object = new stdClass;8. $tmp_object->str_attr = 'test';9. $tmp_object->int_attr = 123;10.11. $memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");12. echo "Store data in the cache (data will expire in 10 seconds)<BR>\n";13.14. $get_result = $memcache->get('key');15. echo "Data from the cache:<BR>\n";16.17. var_dump($get_result);我们已经安装好了,也配置好了memcache,现在接下来如何调试memcache.来做个测试。
先搞个表:create table t(id char(36) not null primary key, username varchar(20) not null);插点数据:insert into t values (uuid(),'Livia'),(uuid(),'Lucy'),(uuid(),'Sivia'),(uuid(),'david');写个简单脚本测试一下。
<?php$host = '192.168.1.21:3306';$user = 'webuser';$passwd = '123456';$db = 'test';$conn = mysql_connect($host,$user,$passwd);mysql_select_db($db,$conn);$sql = 'select * from t order by id desc';$result = mysql_query($sql,$conn);while ($row = mysql_fetch_array($result,MYSQL_ASSOC)){ $test_key[] = $row;}$sql = md5($sql);$mem = new Memcache;$mem->connect("192.168.1.21", 11211);$mem->set($sql,$test_key, MEMCACHE_COMPRESSED, 600);print_r($mem->get($sql));?>看看结果出来了。
C:\>php -f "d:/lamp/web2/phpinfo.php"Array([0] => Array([id] => d8f1ec2a-c033-11dd-bd1a-002215c94322 [username] => david)[1] => Array([id] => d8f1eb9e-c033-11dd-bd1a-002215c94322 [username] => Sivia)[2] => Array([id] => d8f1ea9a-c033-11dd-bd1a-002215c94322 [username] => Lucy)[3] => Array([id] => d8f1e658-c033-11dd-bd1a-002215c94322[username] => Livia))现在我们已经介绍Memcache安装,不再赘述。
再次着重介绍memcache的一些常用方法。
Memcache::add // 添加一个值,如果已经存在,则返回falseMemcache::addServer // 添加Memcache地址Memcache::close // 关闭一个Memcache的连接Memcache::connect // 打开一个到Memcache的连接Memcache::decrement // 对保存的某个key中的值进行减法操作Memcache::delete // 删除一个Memcache上的key值Memcache::flush // 刷新所有Memcache上保存的项目(类似于删除所有的保存的项目)Memcache::get // 从Memcache上获取一个key值Memcache::getExtendedStats // 获取进程池中所有进程的运行系统统计Memcache::getServerStatus // 获取运行服务器的参数Memcache::getStats //获取当前Memcache服务器运行的状态Memcache::getVersion // 返回运行的Memcache的版本信息Memcache::increment // 对保存的某个key中的值进行加法操作Memcache::pconnect // 打开一个到Memcache的长连接Memcache::replace // 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)Memcache::set // 向Memcache添加一个值,如果已经存在,则覆写Memcache::setCompressThreshold // 对大于某一大小的数据进行压缩Memcache::setServerParams // 在运行时修改服务器的参数下面是一些简单的用法实例,仅供参考:<?php$mem = new Memcache;$mem->connect("127.0.0.1", 12000);//Memcache::set方法有四个参数,第一个参数是key,第二个参数是value,第三个参数可选,表示是否压缩保存,第四个参数可选,用来设置一个过期自动销毁的时间。