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 相关文章推荐
文件上传类
Oct 09 PHP
phpBB BBcode处理的漏洞
Oct 09 PHP
怎么样可以把 phpinfo()屏蔽掉?
Nov 24 PHP
深入PHP magic quotes的详解
Jun 17 PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 PHP
php.ini中的request_order推荐设置
May 10 PHP
PHP中each与list用法分析
Jan 08 PHP
PHP socket 模拟POST 请求实例代码
Jul 18 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 PHP
phpstudy2020搭建站点的实现示例
Oct 30 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
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
php的curl封装类用法实例
2014/11/07 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
PHP加密技术的简单实现
2016/09/04 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
javascript数组排序汇总
2015/07/07 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
js如何打印object对象
2015/10/16 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
Python编程之多态用法实例详解
2015/05/19 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
高中美术教师事迹材料
2014/08/22 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
校园开放日新闻稿
2015/07/17 职场文书
初中班主任心得体会
2016/01/07 职场文书
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android