亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

php redis實(shí)現(xiàn)文章發(fā)布系統(tǒng)(用戶投票系統(tǒng))

 更新時(shí)間:2017年03月04日 09:00:47   作者:qing0506  
這篇文章主要為大家詳細(xì)介紹了php redis實(shí)現(xiàn)文章發(fā)布系統(tǒng)以及用戶投票系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了php實(shí)現(xiàn)文章發(fā)布系統(tǒng)、用戶投票系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

/**
  * @data 文章發(fā)布
  *    文章詳情散列表中遞增ID,講文章發(fā)布者ID寫(xiě)入投票用戶集合中,設(shè)置投票時(shí)間為一周
  *    講文章內(nèi)容寫(xiě)入文章散列中,講文章寫(xiě)入文章評(píng)分有序集合和文章發(fā)布有序集合中
  * @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);
    //設(shè)置過(guò)期時(shí)間(為1周)
    $this->redis->expipre($voted,$ONE_WEEK_IN_SECONDS,$key);

    //獲取現(xiàn)在的時(shí)間
    $now =time();
    $article = "article:".$article_id;
    $data = ['title'=>'測(cè)試1','link'=>'www.hahaha.com','poster'=>$user,'tine'=>$now,'votes'=>1];
    //$data = json_encode($data);
    $redis -> hmset($article,$data,$key);

    //將文章添加到根據(jù)時(shí)間排序有序集合和根據(jù)評(píng)分排序有序結(jié)合中
    $this -> redis -> zadd("score:",1,$article,$key);
    $this -> redis -> zadd("time:",$now,$article,$key);

    $redis -> exec($key);
  }

/**
  * @data 用戶投票
  *    獲取文章的ID,用戶ID,判斷該篇文章是否已經(jīng)過(guò)了投票時(shí)間,再判斷用戶是否已經(jīng)投過(guò)票
  *    寫(xiě)入文章對(duì)應(yīng)投票用戶表中(voted:文章ID),對(duì)應(yīng)的文章評(píng)分加,文章詳情內(nèi)容中的votes統(tǒng)計(jì)加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;
    //文章發(fā)布時(shí)間和投票截止日期對(duì)比
    if($redis->zscore('time:',$article,$key) < $cutoff){
      var_dump("該文章已過(guò)投票時(shí)間!");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("您已經(jīng)投過(guò)票了!");exit;
    }
  }
/**
  * @data 文章列表分頁(yè)
  *    對(duì)文章評(píng)分有序集合或者時(shí)間發(fā)布有序集合做分頁(yè)處理,獲取文章ID后,去文章詳情散列表中查詢?cè)撐恼略斍?
  * @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 文章添加組和移除組
  *    講該文章加入不同的分組中,或者從個(gè)分組中移除該篇文章
  * @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 組集合中的文章根據(jù)評(píng)分或者時(shí)間分頁(yè)排序
  *    
  * @author Lorne
  * @date 2017-03-03
  */
  public function get_grouop_articles($orders = "time:"){
    $redis = $this -> redis;
    $db = "queue";
    $group = '開(kāi)發(fā)';
    $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,簡(jiǎn)易的實(shí)現(xiàn)文章發(fā)布系統(tǒng),用戶投票,文章分組,分頁(yè)排序。

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論