最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

thinkphp5?操作redis?實現(xiàn)文章的熱度排行和點贊排行的示例

 更新時間:2022年04月02日 10:50:26   作者:seaiio  
本文主要介紹了thinkphp5?操作redis?實現(xiàn)文章的熱度排行和點贊排行的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

使用redis hash散列 和zset有序集合實現(xiàn)文章的熱度排行和點贊排行 1.首先為文章建立散列,存入基本信息。 mysql簡單設計

獲取所有文章,并存入redis

//所有新聞頁
public function news()
{
    $redis = new Redis();
    $list  = News::select();
    foreach ($list as &$row){
        //將所有數(shù)據(jù)存到hash散列里,用于顯示簡介信息
        $redis->handler()->hmset('newsId-'.$row->id,array('id'=>$row->id,'title'=>$row->title,'name'=>$row->name,'create_time'=>$row->create_time));
    }

    return json($list);//返回給前端所有數(shù)據(jù);
}

2.初始化所有文章的瀏覽數(shù)和點贊數(shù)

 //初始化文章熱度和點贊數(shù)
public function startNews()
{
    $redis= new Redis();
    $list = News::select();
    foreach ($list as &$row){
        //為每個文章添加熱度
        $redis->zAdd('hot','0','newsId-'.$row->id);
        //為每個文章添加點贊數(shù)
        $redis->zAdd('good','0','newsId-'.$row->id);
    }
    dump($redis->zRange('hot','0','-1',true));
    dump($redis->zRange('good','0','-1',true));
}

結(jié)果

array(5) {
  ["newsId1"] => float(0)
  ["newsId2"] => float(0)
  ["newsId3"] => float(0)
  ["newsId4"] => float(0)
  ["newsId5"] => float(0)
}
array(5) {
  ["newsId1"] => float(0)
  ["newsId2"] => float(0)
  ["newsId3"] => float(0)
  ["newsId4"] => float(0)
  ["newsId5"] => float(0)
}

3.訪問新聞 訪問新聞時,mysql正常讀取信息返回給前端,(此處不做代碼實現(xiàn))。然后熱度排行自動增長1.

 	$redis   = new Redis();
    $param   = $this->request->param();
    $news_id = $param['news_id'];
    $list    = News::where('id',$news_id)->find();//數(shù)據(jù)庫查到的信息,返回給前端
    $redis->zIncRby('hot','1','newsId-'.$news_id);//redis數(shù)據(jù)增長1
    return json($list);

4.點贊新聞

public function newsGoods()
{
    $redis   = new Redis();
    $param   = $this->request->param();
    $news_id = $param['news_id'];
    $redis->zIncRby('good','1','newsId-'.$news_id);//redis數(shù)據(jù)增長1
}

這時候基本業(yè)務代碼已經(jīng)完事。然后開始查看排行。首先測試查看一下熱度排行和點贊排行的文章。

 dump($redis->zRange('hot','0','-1',true));//查看熱度排行
 dump($redis->zRange('good','0','-1',true));//查看點贊排行

結(jié)果

熱度
array(5) {
  ["newsId-3"] => float(2)
  ["newsId-4"] => float(4)
  ["newsId-1"] => float(6)
  ["newsId-2"] => float(9)
  ["newsId-5"] => float(16)
}
點贊
array(5) {
  ["newsId-1"] => float(3)
  ["newsId-2"] => float(8)
  ["newsId-3"] => float(10)
  ["newsId-4"] => float(14)
  ["newsId-5"] => float(48)
}

5.查看熱度排行榜(包括新聞簡介)注:可能有一種情況發(fā)生,文章id存在于排行榜中,但是對應文章的簡介不在內(nèi)存中,那就需要去數(shù)據(jù)庫重新查此id文章的內(nèi)容(我已經(jīng)刪除了newsId-2的簡介)

//訪問熱度排行
public function newsHot()
{
    $redis   = new Redis();
    $rank    = $redis->handler()->zrevrange('hot','0','2');
    foreach ( $rank as &$row ){
        $id  = $row;
        $row = $redis->hGetAll($row);//去hash散列里取得之前存好的文章簡介
        if(!$row){
            //緩存里沒有該信息,去數(shù)據(jù)庫查找
            $id = trim($id,'newsId-');//切割字符串。獲得文章id
            $row = Db::name('news')->where('id',$id)->find();
        }
    }
    dump($rank);
}

結(jié)果

    array(3) {
  [0] => array(4) {
    ["title"] => string(15) "第五個文章"
    ["name"] => string(7) "作者5"
    ["create_time"] => string(19) "2019-11-28 14:33:43"
    ["id"] => string(1) "5"
  }
  [1] => array(7) {
    ["id"] => int(2)
    ["title"] => string(15) "第二個文章"
    ["name"] => string(7) "作者2"
    ["detail"] => string(8) "詳情22"
    ["create_time"] => string(19) "2019-11-28 14:33:43"
    ["hot"] => int(0)
    ["good"] => int(0)
  }
  [2] => &array(4) {
    ["title"] => string(7) "文章1"
    ["name"] => string(6) "作者"
    ["create_time"] => string(19) "2019-11-28 14:33:43"
    ["id"] => string(1) "1"
  }
}

其中第二個文章在redis內(nèi)存中不存在,重新再數(shù)據(jù)庫中查到的數(shù)據(jù)

6.查看點贊排行榜(包括新聞簡介)

//點贊熱度排行
public function newsGood()
{
    $redis   = new Redis();
    $rank = $redis->handler()->zrevrange('good','0','2');
    foreach ($rank as &$row){
        $id  = $row;
        $row = $redis->hGetAll($row);//去hash散列里取得之前存好的文章簡介
        if(!$row){
            //緩存里沒有該信息,去數(shù)據(jù)庫查找
            $id = trim($id,'newsId-');//切割字符串。獲得文章id
            $row = Db::name('news')->where('id',$id)->find();
        }
    }
    dump($rank);
}

結(jié)果:

array(3) {
  [0] => array(4) {
    ["title"] => string(15) "第五個文章"
    ["name"] => string(7) "作者5"
    ["create_time"] => string(19) "2019-11-28 14:33:43"
    ["id"] => string(1) "5"
  }
  [1] => array(4) {
    ["title"] => string(15) "第四個文章"
    ["name"] => string(7) "作者4"
    ["create_time"] => string(19) "2019-11-28 14:33:43"
    ["id"] => string(1) "4"
  }
  [2] => &array(4) {
    ["title"] => string(15) "第三個文章"
    ["name"] => string(7) "作者3"
    ["create_time"] => string(19) "2019-11-28 14:33:43"
    ["id"] => string(1) "3"
  }

}

到此這篇關于thinkphp5 操作redis 實現(xiàn)文章的熱度排行和點贊排行的示例的文章就介紹到這了,更多相關thinkphp5 熱度排行和點贊排行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • PHP實現(xiàn)用戶登錄的案例代碼

    PHP實現(xiàn)用戶登錄的案例代碼

    這篇文章主要介紹了PHP實現(xiàn)用戶登錄的案例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • PHP并發(fā)查詢MySQL的實例代碼

    PHP并發(fā)查詢MySQL的實例代碼

    本篇文章主要介紹了PHP并發(fā)查詢MySQL的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • php中Swoole的熱更新實現(xiàn)代碼實例

    php中Swoole的熱更新實現(xiàn)代碼實例

    這篇文章主要介紹了php中SWOOLE的熱更新實現(xiàn)代碼實例,熱更新是比較常用的技術(shù),有需要同學可以研究下
    2021-03-03
  • php+js實現(xiàn)異步圖片上傳實例分享

    php+js實現(xiàn)異步圖片上傳實例分享

    本來想用插件上傳圖片的,后來自己寫了一個簡單的js實現(xiàn)異步的圖片上傳,不多說上代碼非常簡單
    2014-06-06
  • php_screw安裝使用教程(另一個PHP代碼加密實現(xiàn))

    php_screw安裝使用教程(另一個PHP代碼加密實現(xiàn))

    這篇文章主要介紹了php_screw安裝使用教程,php_screw是另一個PHP代碼加密實現(xiàn),和Zend的encoder類似,需要的朋友可以參考下
    2014-05-05
  • 純PHP代碼實現(xiàn)支付寶批量付款

    純PHP代碼實現(xiàn)支付寶批量付款

    最近在做一個使用支付寶轉(zhuǎn)賬的項目,其中有需求把我難到了:批量支付成功后不知道怎么接收系統(tǒng)返回的通知,經(jīng)過朋友幫忙,此功能實現(xiàn),下面小編把具體代碼整理分享給大家,供大家參考
    2015-12-12
  • nginx簡單配置多個php服務實例教程

    nginx簡單配置多個php服務實例教程

    nginx安裝剛安裝好是不能訪問php文件的,需要我們進行配置,下面這篇文章主要給大家介紹了關于nginx簡單配置多個php服務的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • ThinkPHP緩存方法S()概述

    ThinkPHP緩存方法S()概述

    thinkPHP的F方法只能用于緩存簡單數(shù)據(jù)類型,不支持有效期。S()緩存方法支持有效期,又稱動態(tài)緩存方法,這篇文章主要介紹了ThinkPHP緩存方法S(),需要的朋友可以參考下
    2014-06-06
  • 淺談PHP5.6 與 PHP7.0 區(qū)別

    淺談PHP5.6 與 PHP7.0 區(qū)別

    這篇文章主要介紹了淺談PHP5.6 與 PHP7.0 區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • PHP迭代器實現(xiàn)斐波納契數(shù)列的函數(shù)

    PHP迭代器實現(xiàn)斐波納契數(shù)列的函數(shù)

    斐波納契數(shù)列通常做法是用遞歸實現(xiàn),當然還有其它的方法。這里現(xiàn)學現(xiàn)賣,用PHP的迭代器來實現(xiàn)一個斐波納契數(shù)列,幾乎沒有什么難度,只是把類里的next()方法重寫了一次。注釋已經(jīng)寫到代碼中,也是相當好理解的
    2013-11-11

最新評論

盐边县| 潼关县| 乐平市| 枣庄市| 乐亭县| 休宁县| 平和县| 莆田市| 栖霞市| 赣榆县| 涡阳县| 额敏县| 凉城县| 都兰县| 泽州县| 肇源县| 正定县| 来宾市| 安福县| 沁水县| 富顺县| 嘉定区| 会泽县| 荆州市| 沧州市| 安远县| 根河市| 蓬莱市| 堆龙德庆县| 屏山县| 吴桥县| 全南县| 湖北省| 鄂温| 和龙市| 彩票| 黄陵县| 团风县| 宁强县| 英吉沙县| 雅安市|