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&amp;mysql(四)
Oct 09 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
使用php计算排列组合的方法
Nov 13 PHP
php计算2个日期的差值函数分享
Feb 02 PHP
CI框架集成Smarty的方法分析
May 17 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
Jan 16 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
PHP getNamespaces()函数讲解
Feb 03 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
PHP与SQL语句写一句话木马总结
Oct 11 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 PHP
PHP autoload使用方法及步骤详解
Sep 05 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
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
修改jquery.lazyload.js实现页面延迟载入
2010/12/22 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
2016/08/13 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
Python的print用法示例
2014/02/11 Python
Python实现从url中提取域名的几种方法
2014/09/26 Python
简单的编程0基础下Python入门指引
2015/04/01 Python
python中import reload __import__的区别详解
2017/10/16 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
Django添加feeds功能的示例
2018/08/07 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
公司年会搞笑主持词
2014/03/24 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
党的群众路线教育实践活动个人剖析材料
2014/10/07 职场文书
教师批评与自我批评
2014/10/15 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
档案工作个人总结
2015/03/03 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
退休教师追悼词
2015/06/23 职场文书
养成教育主题班会
2015/08/13 职场文书