memcache应对高并发量的优化


立即下载 坚挺的阿袁
2024-04-20
memcache memcahce key txt result connect 页面 数据库 请求 连接
96.4 KB

我们都知道 memcahce 是解决大并发量的很好一个工具,但是有一个问题值得注意,
当突然有很多用户请求我们的某个页面,请求的参数相同,但对应的值却在
memcahce 中没有,此时这些请求都将会去查询数据库操作,瞬间对数据库照成了很
大的压力。
下面我做了一个小例子来模拟这种情况。
原页面代码:
$memcache = new Memcache();
$memcache -> connect("127.0.0.1",11211) or die("connect failed");
$key = $_GET['key'];
if($result = $memcache->get($key)) {
$s = "get result form memcache: ".$key."/".$result."\n";
file_put_contents("/var/www/html/log1.txt",$s,FILE_APPEND);
echo $s;
}else {
// 模拟查询数据库
sleep(5); // 休眠 5秒
$result = mt_rand(1,100);
$memcache -> set($key,$result,0,3600);
$s = "get result not from memcache: ".$key."/".$result."\n";
file_put_contents("/var/www/html/log2.txt",$s,FILE_APPEND);
echo $s;
}
?>
此代码的意思是,我通过某个参数 key 来访问这个页面,如果此 key 在 memcahce 中
存在,则在 log1.txt 中写入一条数据,如果不存在则在 log2.txt 中写入一条数据,同时
将此 key 得到的结果放入 memcahce 中。
这里值得注意的是我在连接 memcahce 时候加了一句“ or die("connect failed"); ”,
即当连接报错时退出,因为有可能当 memcahce 的连接数超出了它本身限制的次数后,
导致连接不上,从而会执行会执行 else


memcache/memcahce/key/txt/result/connect/页面/数据库/请求/连接/ memcache/memcahce/key/txt/result/connect/页面/数据库/请求/连接/
-1 条回复
登录 后才能参与评论
-->