康康马

PHP优化(一) --使用文件缓存降低数据库的并发连接数

 kangkangma | 06 十二月, 2007 18:32

    笔者目前所在公司的网站访问量那是相当的大,所以在编程中对PHP程序的优化要求很高。优化有很多种方法,本文介绍的文件缓存方法主要是在数据库并发访问量很大的时候能有效的降低mysql的连接数。缓存的方法有很多种,本地文本缓存只是其中最简单的一种,当访问量超过一定的数量的时候,可能还需要考虑其他的缓存方法,笔者在接下来的文章中也会做相应的介绍。

    文本缓存的主要原理就是针对不是实时更新的数据,每次访问先查看有没有文本缓存,有则从文本缓存中读取数据,如果没有则从数据库里读取数据,并生成缓存,那么在下次读取的时候便可以从缓存中读取,而不用连接数据库,可以极大的降低数据库的并发连接数。针对不同的应用情况,可分别设置cache的过期时间。

cache example
  1. function getNewsData()
  2. {
  3. $cache_file = 'cache/news_data.txt';
  4. if (file_exists($cache_file)&&time() - filectime($cache_file) < 60)
  5. {
  6. $ret_str = file_get_contents($cache_file);
  7. return unserialize($ret_str);
  8. }
  9. else
  10. {
  11. include ("include/conn_dc.php");
  12.  
  13. $sql = "select * from news limit 4";
  14.  
  15. $result = mysql_query($sql, $mysql_db_link);
  16.  
  17. while ($result && $row = mysql_fetch_assoc($result))
  18. {
  19. $ret[] = $row;
  20. }
  21. mysql_close($mysql_db_link);
  22.  
  23. if (!empty ($ret))
  24. {
  25. $ret_str = serialize($ret);
  26. $handle = fopen($cache_file, 'w');
  27. if ($handle)
  28. {
  29. fwrite($handle, $ret_str, strlen($ret_str));
  30. fclose($handle);
  31. }
  32. }
  33.  
  34. return $ret;
  35. }
  36. }
kangkangma © 2007

注意事项

1. linux每个目录下的文件数量是限制的,所以在生成cache文件的时候要注意文件的数量。
2. 如果遇到特别复杂的sql,比如需要执行1秒以上,那么可能发生的情况是,需要一秒以上的时间才能生成cache文件,而在这一秒钟里可能会有大量的并发访问,导致服务器当机,所以sql的执行时间也是需要考虑的因素。