clowwindy的杂草牧场

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  34 随笔 :: 1 文章 :: 75 评论 :: 13万 阅读

因为项目要用到Memcache,就研究了一下,然后记个流水帐。

Memcached是一个开源的分布式内存对象缓存系统。虽然从本质上看用途很宽泛,但它的主要设计目的是通过减轻数据库负载来加速动态网站。它本身作为单独的进程运行,通过TCP和需要存取数据的其它进程(如php、python)通信。

以Debian为例,它的安装非常简单:

先装上libevent-dev包,然后解压源码,编译安装即可。

./configure
make && make install


PHP有两个模块:Memcache和Memcached。他们都是PHP的memcached客户端库,只不过Memcached提供了更多功能。就先看第一个。

首先下载它的源代码,解压。确保安装了php5-dev,然后在解压后的目录里执行:

phpize
./configure
make && make install


然后再/etc/php/conf.d/里加一个memcache.ini文件,内容就一句extension=memcache.so就可以了。然后重启apache或者挂了php-cgi的进程。
然后启动之前编译的Memcached:

memcached -u www-data -d

-u是指定memcached的用户,-d是让它作为daemon。
接下来就可以写Hello world了:

复制代码
<!doctype html>
<meta charset=utf8 />
result:
<?php
$memcache = new Memcache();
$memcache->connect("127.0.0.1", 11211);
$data = $memcache->get("data");
//echo $data;
if($data === false || $_GET["force"]){
$data = $_GET['data'];
}
$memcache->set("data", $data, MEMCACHE_COMPRESSED, 10);

echo $data;
?>
<form action="" method="GET">
<input name="force" type="checkbox" />Force update
<p>
<input name="data" />
<input type=submit />
</form>
复制代码

这里将一个填入文本框的data字符串显示出来,并存入Memcached中,过期时间设为10秒钟。如果Memcached中保存了这个字符串,就将它取出来,否则把用户新输入的字符串存进去。

然后测了下性能:

单侧php的性能,php内容为上面的代码把memcache相关内容移除,另外echo换成echo "hello":

2713.06 [#/sec]

然后测Memcached的get(上面的hello world不加参数):

1769.21 [#/sec]

Memcached进行get和set(上面的hello world加force=on&data=asdfkjasldfasd980fuwe):

1751.05 [#/sec]

可以看出Memcache因为要建立TCP连接,还是损失了不小的性能,慢在connect。如非缓存确实比读取数据库、处理要省很多时间,否则不应随意使用。

posted on   clowwindy  阅读(970)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示