首页 > CMS > PhpCMS > 正文

PHPCMS 中 cache_count() 函数的作用

2024-09-10 07:16:05
字体:
来源:转载
供稿:网友

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

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

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

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

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

但是我错了,想象一下:

总共有 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 = 默认缓存有效期)

%%

# 历史

2011-10-14 初稿,包含 cache_count() 及 page_select() 两个函数的说明.

2012-04-22 删除 page_select() 函数的说明,只说明 cache_count() 函数.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表