国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php redis實現文章發布系統(用戶投票系統)

2024-05-04 23:55:40
字體:
來源:轉載
供稿:網友

本文實例為大家分享了php實現文章發布系統、用戶投票系統的具體代碼,供大家參考,具體內容如下

/**  * @data 文章發布  *    文章詳情散列表中遞增ID,講文章發布者ID寫入投票用戶集合中,設置投票時間為一周  *    講文章內容寫入文章散列中,講文章寫入文章評分有序集合和文章發布有序集合中  * @author Lorne  * @date 2017-03-03  */  public function post_article($user){    $VOTE_SCORE = 24;    $redis = $this -> redis;    $key= "queue";    $ONE_WEEK_IN_SECONDS= 7*86400;    $redis -> multi($key);    //生成新的文章id    $article_id = $redis -> incr("article:",$key);    //文章已投票用戶名單    $voted = "voted:".$article_id;    $this->redis->sadd($voted,$user,$key);    //設置過期時間(為1周)    $this->redis->expipre($voted,$ONE_WEEK_IN_SECONDS,$key);    //獲取現在的時間    $now =time();    $article = "article:".$article_id;    $data = ['title'=>'測試1','link'=>'www.hahaha.com','poster'=>$user,'tine'=>$now,'votes'=>1];    //$data = json_encode($data);    $redis -> hmset($article,$data,$key);    //將文章添加到根據時間排序有序集合和根據評分排序有序結合中    $this -> redis -> zadd("score:",1,$article,$key);    $this -> redis -> zadd("time:",$now,$article,$key);    $redis -> exec($key);  }

 

/**  * @data 用戶投票  *    獲取文章的ID,用戶ID,判斷該篇文章是否已經過了投票時間,再判斷用戶是否已經投過票  *    寫入文章對應投票用戶表中(voted:文章ID),對應的文章評分加,文章詳情內容中的votes統計加1  * @author Lorne  * @date 2017-03-03  */  public function article_vote(){    $ONE_WEEK_IN_SECONDS= 7*86400;    $article = "article:3";    $user = "user:7777";    $redis = $this -> redis;    $key= "queue";    $cutoff = time() - $ONE_WEEK_IN_SECONDS;    //文章發布時間和投票截止日期對比    if($redis->zscore('time:',$article,$key) < $cutoff){      var_dump("該文章已過投票時間!");exit;    }    $article_id = explode(':',$article)['1'];    if($redis->sadd('voted:'.$article_id,$user,$key)){      $redis -> zincrby('score:',$article,1,$key);      $redis -> hincrby($article,'votes',1,$key);    }else{      var_dump("您已經投過票了!");exit;    }  }
/**  * @data 文章列表分頁  *    對文章評分有序集合或者時間發布有序集合做分頁處理,獲取文章ID后,去文章詳情散列表中查詢該文章詳情  * @author Lorne  * @date 2017-03-03  */  public function get_articles($page =1,$orders =''){    $redis = $this->redis;    $db = "queue";    //$orders = "time:";    $per_page = 3;    $start = ($page-1)*$per_page;    $end = $start + $per_page -1;    $ids = $redis -> zrevrange($orders,$start,$end,$db);    foreach($ids as $key=>$val){      $data = $redis -> hgetall($val,$db);      $data['id'] = $val;      $articles[] = $data;    }    return $articles;  }
/**  * @data 文章添加組和移除組  *    講該文章加入不同的分組中,或者從個分組中移除該篇文章  * @author Lorne  * @date 2017-03-03  */  public function add_remove_group($article_id,$to_add = [],$to_remove = []){    $redis = $this->redis;    $db = "queue";    $article = "article:".$article_id;    foreach($to_add as $key=>$val){      $redis -> sadd('group:'.$val,$article,$db);    }    foreach($to_remove as $key=>$val){      $redis -> srem('grouo:'.$val,$article,$db);    }  }
/**  * @data 組集合中的文章根據評分或者時間分頁排序  *      * @author Lorne  * @date 2017-03-03  */  public function get_grouop_articles($orders = "time:"){    $redis = $this -> redis;    $db = "queue";    $group = '開發';    $key = $orders.$group;    if($redis -> exists($key,$db)){      $argument = 2;      $data = $redis -> zinterstore($key,$argument,['group:'.$group,$orders],$db);      //$this -> expire($key,60,$db);    }    return $this->get_articles(2,$key);  }

采用php+redis,簡易的實現文章發布系統,用戶投票,文章分組,分頁排序。

    redis是一個高性能的key-value存儲系統,最為常見的5大類型:string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型),和memcache區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。

    最近越來越喜歡用上redis,有情投意合者一起多多交流呀。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 孙吴县| 武山县| 康定县| 邳州市| 博白县| 邵东县| 松潘县| 滁州市| 砀山县| 萍乡市| 建宁县| 汨罗市| 灵石县| 澎湖县| 大庆市| 淮北市| 屯留县| 宁蒗| 南木林县| 榆树市| 高州市| 石泉县| 澄迈县| 宝丰县| 铜山县| 浑源县| 衡南县| 谢通门县| 南和县| 灌云县| 连城县| 阿拉尔市| 内丘县| 区。| 咸阳市| 宁乡县| 宜君县| 蒲城县| 邓州市| 和政县| 丰镇市|