登录  注册 退出
苏杭php自学网
记录个人学习过程中碰见的问题和感受
要温柔,也要有屠龙的勇气
本站有学习资源,可自由下载学习资料
  1. 首页 > 数据库教程 > Redis

php使用redis实现“浏览量" 功能

作者:苏杭 日期:2020-05-10 13:05:13 点击数:

    在项目中,一般文章的浏览量,是需要频繁的更新的,用户每点进来一次,即为浏览了一次,如果是像大型点的博客类网站,点击量非常多,每一次都要进行mysql 操作,服务器压力很非常大,mysql服务有可能会崩溃,所以,我们为了实现这个频繁更新的访问量小功能,可以使用redis来实现 ~ 


具体实现方法:    

    利用redis的hash类型,进行存储数据,key为cli,filed 为文章的id,value 为文章的浏览量,$redis->hIncrBy('cli',$data['id'],1);   hIncrBy 是自增作用,用户每浏览一次,增加一次浏览量,所有的文章的浏览量都会存储在一个hash里,我们需要做一个定时任务,创建一个接口,接口的内容是:将保存浏览量的hash数组全部更新到Mysql里, 每天夜晚执行一次。


以下是代码(使用的是tp5.1框架):


数据存进redis中

    public function product()

    {

        $redis = new \Redis();

        $redis -> connect('127.0.0.1',6379);

        

        $id = input();

        $data = NewsModel::newProduct($id[0]);   //调用模型查出新闻详情

        

        if(!$redis->hGet("cli",$data['id'])){    //如果没有缓存

            $redis->hSet("cli",$data['id'],$data['click']);

        }

        

        $cli = $redis->hIncrBy('cli',$data['id'],1);   //hash自增

        $vv = $redis->hSet("cli",$data['id'],$cli);  //将自增后的值更新进redis


        $data['click'] = $cli;                  //自增后的数据展示给前端

        $tui = NewsModel::newTuiJian($id[0]);    //推荐文章

        $this->assign('data',$data);

        $this->assign('tui',$tui);

        return $this -> fetch('product');

    }


下面是接口方法(将redis数据更新进mysql):


接口方法 - redis更新到mysql


    public function upMysql()            //接口:将redis数据更新进mysql

    {

      $redis = new \Redis();

      $redis -> connect('127.0.0.1',6379);

      

      $data = $redis->hgetall("cli");       //取出存在redis里的全部数据

      foreach ($data as $key=>$val){        //循环将每条数据更新进mysql

          $data = Db::name('store_news') ->where('id',$key) -> update(['click'=>$val]);

      }

        

    }



标签: redis教程
随便看看
QQ在线咨询
电话:
182 7047 6708
交流微信:
su18270476708