当前位置:首页 » 编程语言 » memcachephp类

memcachephp类

发布时间: 2025-03-17 11:40:04

㈠ Xcache和memcache选哪个好

memcache和 Xcache 是php的2个缓存工具。PHP5.5以来,自带有 Zend Opcache ,不过默认没启用。
这些缓存器的原理:

引用
把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,它们的效率是显而易见的,像drupal这种庞大的CMS,每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而知

然而Opcache 只自动缓存代码,它没有开放一个自定义缓存的API,要用到用户缓存的话还得用上Xcache或者memcache。
Xcache是中国人所做,看起来很牛叉,但是在实际应用中发现这个东西太不稳定了,光用它作代码缓存(后台自动缓存PHP代码),竟然有时候会使得整个PHP进程都当掉。然后也试了Xcache的用户缓存,API文档写得真够残的,好在还能用,但万没有想到,在fastcgi模式下,缓存命中率低得可怜,用和没用基本上差不多,明明缓存了,后一个请求过来一查却说没缓存,可能延时个几秒后才得知这个已经缓存了,才能取出缓存内容。这玩意到底仔细测试没有?我用的是3.1.0官方正式版Xcache在PHP 5.5 里作的测试,简直就是个废物!还记得以前在PHP5.2里面也用它过,莫名其妙的请求失败也时有出现。现在直接不敢再用……

相比这个XCache,memcache稳定得多。题外话:memcached和memcache又有点不同,memcached是memcache的守护进程,但是PHP中也有memcached的扩展。这两个说实话是让人头晕不知道是什么区别,其实我看来就是调用memcache的封装模式不太一样而已。具体哪些调用上的不同,参考 http://pecl.php.net/package/memcache 和http://pecl.php.net/package/memcached 。一看就知道memcached要多一些API函数调用,功能也更强大一些。而实际上基础应用的话memcache已经足够。

memcache的使用首先要有它的服务(也就是memcached进程)在跑,这个是一个小小的软件,一般是用C++编译,可以部署在与PHP同一台也可以不同,甚至可以分布式部署几个memcached服务在不同的服务器上。而PHP的memcached只是它的客户端而已。memcached本身没有PHP代码缓存功能,现升到PHP5.5后直接交给自带Opcache 了。一般用它作用户缓存。经过实际开发,memcached稳定性是非常高的,只要有缓存,命中率几乎在99%以上。PHP官方下提供了它的扩展可直接使用:http://pecl.php.net/package/memcache 连Windows版的DLL也直接在那里了,不用自己再编译。Windows下编译这些东西真是麻烦得很啦~

综上memcache更加稳定,推荐使用。Xcache真要用的话,还是老实在本地先测试一下再说。
此外,微软Windows下PHP可以使用Wincache,这个的稳定性没得说的,而且也不用守护进程。但是微软没能编译适用于PHP 64位的DLL。要想通用和跨平台,memcache是首选!!

㈡ PHP缓存技术的PHP缓存类型

1、数据库数据缓存技术:
数据缓存:这里所说的数据缓存是指数据库查询PHP缓存机制,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。
用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。和memcache技术。
举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。
常用的数据库数据缓存技术有:
1.序列化(串行化)缓存
2.JSON缓存
3.XML缓存
4.Array缓存
2、页面缓存:
每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些PHP缓存机制类通常有此功能,例如smarty模板、thinkphp框架)

㈢ php 中的 memcache 是什么 怎么用的 越详细越好,求大神 在线等

memcache 本身是一款分布式的高速缓存系统,以 key-value 的形式常驻内存,一般用来做网站或者数据库的缓存使用。
特别是对以下场景非常适合用 memcache 来做缓存:
1. 频繁访问的数据2. 安全性要求比较低的数据
3. 更新比较频繁的小表(用户状态表、物品库存等)

㈣ thinkphp里面怎样配置memcache

1、下载并安装memcache (1)window下安装memcache. 下载memcached.exe 到d:/memcached/memcached.exe.在运行cmd 输入 d:/memcached/memcached.exe -d install安装 。 (2)运行d:/memcached/memcached.exe -d start 启动memcache (3)下载php_memcache.dll 到php安装目录扩展目录 php\ext (4)修改php.ini 加入 extension=php_memcache.dll 重启apache.查看phpinfo.php 如果有memcache模块 则 说明安装成功 2、thinkphp 中memcache 的使用 (1)ThinkPHP/conf/convention.php 修改缓存类型 'DATA_CACHE_TYPE' => 'Memcache', // 数据缓存类型, 支持: File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator (2)thinkphp官方下载扩展ThinkPHP_Extend_3.1.2/Extend/Driver/Cache/CacheMemcache.class.php 保存到 ThinkPHP/Lib/Driver/Cache/CacheMemcache.class.php (3)测试: S('test','memcache');$test = S('test'); echo $test; 输出memcache 测试成功。 此为转载,不是我原创,

㈤ 使用php Memcache模块如何正确遍历所有KEY以及VALUE

在php提供的用于与memcached交互的扩展模块中有memcached与memcache,前者提供方法getAllKeys用于遍历所有Memcached服务器上的key,但是并不保证原子操作,而后者却没有提供任何方法,虽然在PHP官方
文档中有人给出使用方法getExtendedStats来间接获取Memcached服务器上的所有key,但是给出的代码是有不少坑的,如果拿来就用,对于cluster的memcached服务器而言,有些问题就需要指出来。
下面将给出官方文档中的代码,并指出可能面临的问题,代码如下:
<?php
/**
*Functiontogetallmemcachekeys
*@authorManishPatel
*@Created:28-May-2010
*/
functiongetMemcacheKeys(){

$memcache=newMemcache;
$memcache->connect('127.0.0.1',11211)ordie("");

$list=array();
$allSlabs=$memcache->getExtendedStats('slabs');
$items=$memcache->getExtendedStats('items');
foreach($allSlabsas$server=>$slabs){
foreach($slabsAS$slabId=>$slabMeta){
$cmp=$memcache->getExtendedStats('cachemp',(int)$slabId);
foreach($cmpAS$keys=>$arrVal){
foreach($arrValAS$k=>$v){
echo$k."<br>";
}
}
}
}//EOgetMemcacheKeys()?>
在上述代码中,如果用于获取单个memcached服务器上的key,是不存在任何问题,但是获取连接池中的多个memcached所有key就存在问题,会发现打印出重复的key,问题就在于当使用getExtendedStats用去特定$slabID
上的信息时,返回的是连接池中所有的服务器上的特定$slabId的存储的keys信息。当$server为"127.0.0.1:11214"且$slabId为0将变量$cmp的信息打印出如下所示:
array(2){
["127.0.0.1:11214"]=>
array(1){
["course_schools__??¨é?¨"]=>
array(2){
[0]=>
string(1)"0"[1]=>
string(10)"12"}
}
["127.0.0.1:11216"]=>
array(1){
["monitorMemcache"]=>
array(2){
[0]=>
string(2)"10"[1]=>
string(10)"12"}
}
}
当$server为"127.0.0.1:11216"且$slabId为0将变量$cmp的信息打印出如下所示:
array(2){
["127.0.0.1:11214"]=>
array(1){
["course_schools__??¨é?¨"]=>
array(2){
[0]=>
string(1)"0"[1]=>
string(10)"12"}
}
["127.0.0.1:11216"]=>
array(1){
["monitorMemcache"]=>
array(2){
[0]=>
string(2)"10"[1]=>
string(10)"12"}
}
}

热点内容
立体存储仓 发布:2025-03-17 14:32:23 浏览:850
钉钉如何缓存 发布:2025-03-17 14:28:44 浏览:187
adbandroid源码 发布:2025-03-17 14:21:54 浏览:691
编程与边城 发布:2025-03-17 14:21:49 浏览:473
step7移植到博途编译报警怎么办 发布:2025-03-17 14:09:27 浏览:49
蜗牛游戏安卓手机怎么更换账号 发布:2025-03-17 13:41:49 浏览:323
为什么人买一个苹果一个安卓 发布:2025-03-17 13:36:59 浏览:440
三星手机短信在那个文件夹 发布:2025-03-17 13:31:51 浏览:195
安卓皇帝隐藏剧情在哪里 发布:2025-03-17 13:18:53 浏览:508
新版安卓为什么不兼容 发布:2025-03-17 13:18:49 浏览:484