标签:断网 style 报错 进入 主题 个人 exist src ring
今天算是认识到博客园里的审查团队多内幕了,哈哈,贴个图玩下。
气死宝宝了。
进入主题!
今天就不写什么功能性的了,换下口味说下关于页面级的缓存,应该怎么做。
相信有很多小伙伴查了百度,甚至google,看了很多文章,以前我也这样做了,但是发现,上面写的真的不知所云。
有两点可以看出他们哪里不行:
上面就是判断网上一些写页面缓存的文章好不好的依据,每个人的用法总会有点不一样,小弟也不敢妄下定论,仅供参考。
前提分析!
还是直接上图:
上面的图,我分为了三个层级去做页面缓存,其实不一定要三个层面都实现的,如果你做了页面级的,项目初期是够了,作为接口级,基本可以解决很多吞吐量。
对于上面的三个层级,我用了同一个方法去做。
知识准备:
好了,废话说完了,直接上代码!
1 <?php 2 class Test 3 { 4 public $redis = null; 5 6 public function __construct() 7 { 8 $this->redis = new Redis(); 9 $this->redis->connect(‘127.0.0.1‘,6379); 10 $this->redis->auth(‘‘); 11 } 12 //这里是个例子模型,按照自己的用法去套进去就行 13 //以文章为例子吧 14 //页面级,接口级都可以用 15 public function getData() 16 { 17 //判断缓存的键是否还存在 18 if(!$this->redis->exists("cache:".$commentid)) 19 { 20 //缓存不存在 21 //下面的get_mysql_data()函数只是个例子,按照自己具体情况去mysql获取数据 22 $data = $this->get_mysql_data(); 23 $json = json_encode($data,JSON_UNESCAPED_UNICODE); 24 //存入redis 25 $this->redis->set("cache:".$commentid,$json); 26 //设置过期时间5分钟 27 $this->redis->expire("cache:".$commentid,60*60*5); 28 } 29 30 $json = $this->redis->get("cache:".$commentid); 31 $data = json_decode($json,true); 32 return $data; 33 } 34 }
对于上面的代码有几点提示:
下面说下怎么设置过期时间:
这个是没有一个统一的说法的,第一根据你的项目阶段,第二是用户流量的多少,第三是数据的冷热程度等方面去判断。
项目阶段:其实和用户流量有很多的关联,举个例子,假设你的项目在初期,但是用户已经爆炸了,这时,设置的缓存时间可以贼短,哪怕2秒,都能帮你解决很大的吞吐量。
冷热程度:冷指的是用户浏览次数少的,热的就很明显啦,热还有一种特殊的代表,数据的更新频率,更新频率高的应该时间约短。
特殊操作:更新部分数据时,可以考虑将对应的缓存键时间设为过期,这样用户看到的数据都是最新的,而且缓存功能依然存在,设置生存时间过期,很简单,expire设置为0就可以了
另一种页面缓存:
下面介绍一种不一样的数据缓存:
突然不想写了,因为我感觉上面的做法算是涵盖了,算是上面的接口级的做法。我就简单说下算了。
这里还是以文章为例子吧,我们论坛里最多的肯定是文章啦,那文章的热度肯定有排序的。对于热文章的访问量是比较大的,然后我们就要缓存假设排名在10000名之内的文章,对于超出这个数的文章,可以不用缓存。
这里顺便预告下,下篇文章是写关于排行榜的,日榜,周榜,年度榜该怎样做。
欢迎交流!
标签:断网 style 报错 进入 主题 个人 exist src ring
原文地址:http://www.cnblogs.com/sunshine-H/p/7941382.html