首页 > 开发 > PHP > 正文

php redis实现文章发布系统(用户投票系统)

2024-05-04 22:48:43
字体:
来源:转载
供稿:网友

本文实例为大家分享了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;  }            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表