教学之友,学习之友。

站长教学网

当前位置: 站长教学网 > 开源代码 > cms教程 >

在PHPCMS中cache_count()函数的作用

时间:2012-06-28 10:43来源:朱健强的blog 作者:ken 点击:

原先我不明白 cache_count 有什么作用,现在谈谈它的用法。

cache_count() 函数第一次看到是在 PHPCMS2008 中,作用是缓存一条 COUNT(*) SQL 查询的结果,如:

cache_count("SELECT COUNT(*) AS count FROM ...")

有一次在写一个后台分页功能时,统计 COUNT(*) 总数的查询使用了 cache_count 做缓存,但在测试分页功能时发现分页无效,本来应有第二页的,但分页结果却还是只有一页。原来是因为统计的查询语句被 cache_count 缓存了且缓存有效期还未过,因此分页结果还是原来的一页。

当时我断定,cache_count 既影响测试又没用。

但是我错了,想象一下:站长教学网 eduyo.com

总共有 88331 条记录,每页显示 20 条,共 4417 页。列表页是前台页面,假设有 10 个并发访问,每个都访问不同的页数,比如 1, 3, 5 页。
于是我发现, COUNT(*) 的结果实际上是一样的,无论是第 1 页,还是第 1000 页,只要数据不变, COUNT(*) 也不会变。实际上,当页数大于 1000 页以后,那怕每天增加 100 页左右的记录数,由于增加的记录是排在前面的,今天的页数到底是 4417 还是 4517 一点关系都没有——根本不会有真正的用户会去看第 4500 多页的数据。

设现在统计 COUNT(*) 需要用时 0.1(s) ,每天列表页会被访问 100 次,那么, COUNT(*) 总用时为 0.1*100 = 10(s) ——花 10(s) 去取 100 个相同的结果!
所以要用 cache_count ,缓存有效期为 1 天。于是,无论今天列表页被访问多少次,都只需执行一次 0.1(s) 的统计,后面每次读取缓存只需用时约 0.0002(s) 。
访问次数越多,节省的时间就越多。

这就是 cache_count 的作用。

所以,列表页都可以用 cache_count() ,唯一需要注意的只是根据数据量的不同设计不同的缓存有效期。

PHPCMS cache_count() 的缓存有效期用常量定义,这不方便灵活地控制每条查询的缓存有效期,所以我把缓存有效期也加入为 cache_count 的参数,原形如下:

cache_count($sql, $timeout = 默认缓存有效期)
 

(责任编辑:ken)
TAG标签: 函数 phpcms
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容