PHP+Redis 实例 页面缓存

 

 

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

 

  按规则生成一个缓存key,传入key判断,redis是否有值,有值就返回,无值了就读取数据库.

<?php
class Test
{
    public $redis = null;

    public function __construct()
    {
        $this->redis = new Redis();
        $this->redis->connect('127.0.0.1',6379);
        $this->redis->auth('');
    }
    //这里是个例子模型,按照自己的用法去套进去就行
    //以文章为例子吧
    //页面级,接口级都可以用
    public function getData()
    {
        //判断缓存的键是否还存在
        if(!$this->redis->exists("cache:".$commentid))
        {
            //缓存不存在
            //下面的get_mysql_data()函数只是个例子,按照自己具体情况去mysql获取数据
            $data = $this->get_mysql_data();
            $json = json_encode($data,JSON_UNESCAPED_UNICODE);
            //存入redis
            $this->redis->set("cache:".$commentid,$json);
            //设置过期时间5分钟
            $this->redis->expire("cache:".$commentid,60*60*5);
        }

        $json = $this->redis->get("cache:".$commentid);
        $data = json_decode($json,true);
        return $data;
    }
}

对于上面的代码有几点提示:

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

 

 

 

转:https://www.cnblogs.com/sunshine-H/p/7941382.html

 

posted @ 2018-05-17 11:11  与f  阅读(4332)  评论(1编辑  收藏  举报