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


Posted in PHP onMarch 04, 2017

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

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

PHP 相关文章推荐
php编程实现获取excel文档内容的代码实例
Jun 28 PHP
php处理斐波那契数列非递归方法
Feb 04 PHP
PHP随机字符串生成代码(包括大小写字母)
Jun 24 PHP
Yii操作数据库的3种方法
Mar 11 PHP
试用php中oci8扩展
Jun 18 PHP
php简单防盗链实现方法
Jul 29 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
Zend Framework入门知识点小结
Mar 19 PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 PHP
PHP抽象类与接口的区别实例详解
May 09 PHP
php实现的生成排列算法示例
Jul 25 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 PHP
PHP获取当前执行php文件名的代码
Mar 02 #PHP
PHP两种实现无级递归分类的方法
Mar 02 #PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 #PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 #PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 #PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 #PHP
根据key删除数组中指定的元素实现方法
Mar 02 #PHP
You might like
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
php Session存储到Redis的方法
2013/11/04 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
javascript getElementsByClassName实现代码
2010/10/11 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
jquery map方法使用示例
2014/04/23 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
2018/01/20 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
2018/06/01 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
python matplotlib画图实例代码分享
2017/12/27 Python
Python类的继承和多态代码详解
2017/12/27 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
python urllib爬虫模块使用解析
2019/09/05 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
Python实现简单猜数字游戏
2021/02/03 Python
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
矫正人员思想汇报
2014/01/08 职场文书
公司活动方案范文
2014/03/06 职场文书
给老婆的保证书范文
2014/04/28 职场文书
出生证明格式
2015/06/15 职场文书
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android