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编程中八种常见的文件操作方式
Nov 19 PHP
PHP __autoload()方法真的影响性能吗?
Mar 30 PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 PHP
php实现的RSS生成类实例
Apr 23 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
php统计数组元素个数的方法
Jul 02 PHP
PHP简单生成缩略图相册的方法
Jul 29 PHP
php输出含有“#”字符串的方法
Jan 18 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 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+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
Python translator使用实例
2008/09/06 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
党员干部公开承诺书
2014/03/26 职场文书
支行行长岗位职责
2015/02/15 职场文书
后勤个人工作总结
2015/02/28 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
初中语文教学反思范文
2016/03/03 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
python基于tkinter制作下班倒计时工具
2021/04/28 Python
微信小程序实现录音Record功能
2021/05/09 Javascript
在Python 中将类对象序列化为JSON
2022/04/06 Python