因为项目要用到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。如非缓存确实比读取数据库、处理要省很多时间,否则不应随意使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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,谁才是开发者新宠?