PHP+Redis 实例【二】页面缓存 新玩法

今天就不写什么功能性的了,换下口味说下关于页面级的缓存,应该怎么做。

相信有很多小伙伴查了百度,甚至google,看了很多文章,以前我也这样做了,但是发现,上面写的真的不知所云。

有两点可以看出他们哪里不行:

第一,网上有很多种写法,只要你稍微有点redis基础,就是懂得redis的五种数据结构的用法,就会发现很明显的错误,连接口都写错了。
第二,缓存时间,你会发现很多他们写了缓存,但是没有缓存的过期时间,这是致命伤,没有什么缓存是不过期的,只是缓存的时间长短而已。你可以给10秒,也可以给10个月。看你具体的业务而定。后面会教你如何判断时间长短。
上面就是判断网上一些写页面缓存的文章好不好的依据,每个人的用法总会有点不一样,小弟也不敢妄下定论,仅供参考。

前提分析!

还是直接上图:

上面的图,我分为了三个层级去做页面缓存,其实不一定要三个层面都实现的,如果你做了页面级的,项目初期是够了,作为接口级,基本可以解决很多吞吐量。

对于上面的三个层级,我用了同一个方法去做。

知识准备:

string redis数据结构(这里我一直都找不到更好的替代品,string主要是方便我操作它的过期时间)
expire()函数,设置键的生存时间。
exists()函数,判断键是否存在。(判断的方法有很多种,ttl()获取它的生存时间,get()函数,判断是否有数据(不过get判断最好不用))。
好了,废话说完了,直接上代码!

复制代码
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 KaTeX parse error: Expected 'EOF', got '}' at position 31: …th(''); 11 }̲ 12 //这里是个例…this->redis->exists(“cache:”.$commentid))
19 {
20 //缓存不存在
21 //下面的get_mysql_data()函数只是个例子,按照自己具体情况去mysql获取数据
22 $data = $this->get_mysql_data();
23 j s o n = j s o n e n c o d e ( json = json_encode( json=jsonencode(data,JSON_UNESCAPED_UNICODE);
24 //存入redis
25 t h i s − > r e d i s − > s e t ( " c a c h e : " . this->redis->set("cache:". this>redis>set("cache:".commentid,$json);
26 //设置过期时间5分钟
27 t h i s − > r e d i s − > e x p i r e ( " c a c h e : " . this->redis->expire("cache:". this>redis>expire("cache:".commentid,60605);
28 }
29
30 $json = t h i s − > r e d i s − > g e t ( " c a c h e : " . this->redis->get("cache:". this>redis>get("cache:".commentid);
31 d a t a = j s o n d e c o d e ( data = json_decode( data=jsondecode(json,true);
32 return $data;
33 }
34 }
复制代码
对于上面的代码有几点提示:

上面只是一个例子,看你自己具体的使用去定
其中mysql数据获取的哪里,要看你自己mysql使用mysqli或者pdo等等方法获取的,哪里随便你替换。
过期时间哪里等下就说
看到30.31行,那里为什么重新从redis拿多一次数据呢?为什么不直接返回mysql的$data不就行了,其实是可以的,只是为了防止redis没有把数据缓存进去,而做的一步,还有一步报错,我没写,自己添加进去吧。
下面说下怎么设置过期时间:

这个是没有一个统一的说法的,第一根据你的项目阶段,第二是用户流量的多少,第三是数据的冷热程度等方面去判断。

项目阶段:其实和用户流量有很多的关联,举个例子,假设你的项目在初期,但是用户已经爆炸了,这时,设置的缓存时间可以贼短,哪怕2秒,都能帮你解决很大的吞吐量。

冷热程度:冷指的是用户浏览次数少的,热的就很明显啦,热还有一种特殊的代表,数据的更新频率,更新频率高的应该时间约短。

特殊操作:更新部分数据时,可以考虑将对应的缓存键时间设为过期,这样用户看到的数据都是最新的,而且缓存功能依然存在,设置生存时间过期,很简单,expire设置为0就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值