免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3729 | 回复: 3
打印 上一主题 下一主题

把静态变量作为cache使用 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-19 01:37 |只看该作者 |倒序浏览
我猜你们肯定都碰到过以下的情况
我有两个表,magazine(杂志信息)和subscibe(订阅信息),在subscibe表内我有一个magazine_id来和magazine表内的编号关联
现在我要做一个浏览订阅信息的列表,这个列表内有一列是显示杂志名称的(magazine表的name字段),有一种办法是使用join在这两个表之间做一个关联,把magazine_id都替换成为name,但是这个列表是一个搜索结果,sql查询语句是拼接而成的,如果再加上join,拼接sql的逻辑会变得有点复杂,所以还是简单的弄一个select * from subscibe where ....,然后把结果集内的magazine_id拿来查询会比较简单一点,这又出现另外的问题就是我不想在我的程序里出现过多的重复查询,比如结果集内有10条数据都是关于同一个magazine_id,我就会多出9条重复的查询,于是我决定这样干


  1. function MagazineInfoById($magazine_id){
  2.     global $db;
  3.     static $magazine_info;

  4.     if (!isset($magazine_info[$magazine_id])){
  5.         $magazine_info[$magazine_id] = $db->getRow('select * from magazine where id = '. $magazine_id);
  6.     }

  7.     return $magazine_info[$magazine_id];
  8. }

  9. while (....){
  10.     $magazine_info = MagazineInfoById($magazine_id);
  11.     .....
  12. }
复制代码


MagazineInfoById()内的静态变量$magazine_info就成为了一个缓存形式的东西,在某些情况下,可以大大的降低查询的次数,避免重复的查询

论坛徽章:
0
2 [报告]
发表于 2005-11-19 02:54 |只看该作者
静态变量其实和全局变量差不多是一样的, 就是访问权限不一样.

论坛徽章:
0
3 [报告]
发表于 2005-11-21 18:29 |只看该作者
为什么根据一些杂志ID取其名称要多次查库呀。莫非楼主由订阅信息取杂志表信息需要一条条的取吗?比如现在有100条订阅信息需要知道杂志名称。你可以查一次订阅信息表取得这些杂志ID,尽管其中可能有重复,你再查一次不就出来了吗?像这样select name from magezine where id in(.....),你说呢。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-11-21 19:42 |只看该作者
magazine表很小的话,直接放到一个array里就无所谓了,magazine表大一点的话,拿这个要好点
其实都无所谓了,只要不是负荷特别重的系统,不用太在意这一点资源消耗的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP