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

本文展示了如何使用PHP和Redis构建文章发布、用户投票、文章分组及分页排序的功能。通过Redis的多种数据结构如哈希、有序集合等,实现了文章ID自增、投票限制、分页查询等核心功能。文章还探讨了Redis作为高性能key-value存储系统的优势及其与memcache的区别。
摘要由CSDN通过智能技术生成

本文实例为大家分享了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,有情投意合者一起多多交流呀。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值