Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in das Beispiel der Implementierung eines Artikelveröffentlichungssystems (Benutzerabstimmungssystem) durch PHP Redis

Detaillierte Einführung in das Beispiel der Implementierung eines Artikelveröffentlichungssystems (Benutzerabstimmungssystem) durch PHP Redis

黄舟
黄舟Original
2017-03-06 09:30:071750Durchsuche

Dieser Artikel stellt hauptsächlich das von PHP Redis implementierte Artikelveröffentlichungssystem und das Benutzerabstimmungssystem im Detail vor. Es hat einen gewissen Referenzwert.

Die Beispiele in diesem Artikel werden mit Ihnen geteilt. Die spezifischen Codes für die Implementierung des Artikelveröffentlichungssystems und des Benutzerabstimmungssystems in PHP dienen als Referenz. Die spezifischen Inhalte lauten wie folgt:

/**
  * @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(&#39;time:&#39;,$article,$key) < $cutoff){
      var_dump("该文章已过投票时间!");exit;
    }
    $article_id = explode(&#39;:&#39;,$article)[&#39;1&#39;];
    if($redis->sadd(&#39;voted:&#39;.$article_id,$user,$key)){
      $redis -> zincrby(&#39;score:&#39;,$article,1,$key);
      $redis -> hincrby($article,&#39;votes&#39;,1,$key);
    }else{
      var_dump("您已经投过票了!");exit;
    }
  }

/**
  * @data 文章列表分页
  *    对文章评分有序集合或者时间发布有序集合做分页处理,获取文章ID后,去文章详情散列表中查询该文章详情
  * @author Lorne
  * @date 2017-03-03
  */
  public function get_articles($page =1,$orders =&#39;&#39;){
    $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[&#39;id&#39;] = $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(&#39;group:&#39;.$val,$article,$db);
    }
    foreach($to_remove as $key=>$val){
      $redis -> srem(&#39;grouo:&#39;.$val,$article,$db);
    }
  }

/**
  * @data 组集合中的文章根据评分或者时间分页排序
  *    
  * @author Lorne
  * @date 2017-03-03
  */
  public function get_grouop_articles($orders = "time:"){
    $redis = $this -> redis;
    $db = "queue";
    $group = &#39;开发&#39;;
    $key = $orders.$group;
    if($redis -> exists($key,$db)){
      $argument = 2;
      $data = $redis -> zinterstore($key,$argument,[&#39;group:&#39;.$group,$orders],$db);
      //$this -> expire($key,60,$db);
    }
    return $this->get_articles(2,$key);
  }

Verwendung von PHP+Redis zur einfachen Implementierung eines Artikelveröffentlichungssystems, Benutzerabstimmung, Artikelgruppierung und Seitensortierung.

Redis ist ein leistungsstarkes Schlüsselwertspeichersystem mit den fünf häufigsten Typen: Zeichenfolge (String), Liste (verknüpfte Liste), Menge (Satz), Zset (sortierte Menge - geordnete Menge) und Hash (Hash-Typ), der Unterschied zum Memcache besteht darin, dass Redis regelmäßig aktualisierte Daten auf die Festplatte schreibt oder Änderungsvorgänge in zusätzliche Datensatzdateien schreibt und auf dieser Basis Master-Slave (Master-Slave) synchron implementiert.

In letzter Zeit verwende ich Redis immer mehr und diejenigen, die es mögen, können mehr miteinander kommunizieren.

Das Obige ist PHP, Redis und der Inhalt des Artikels. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn