本文实例为大家分享了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,有情投意合者一起多多交流呀。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年11月18日
2024年11月18日
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】