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一些服务器端特性的配置加强php的安全
Oct 09 PHP
PHP编码规范-php coding standard
Mar 16 PHP
PHP 日期时间函数的高级应用技巧
Oct 10 PHP
ThinkPHP php 框架学习笔记
Oct 30 PHP
PHP的加密方式及原理
Jun 14 PHP
利用PHP扩展vld查看PHP opcode操作步骤
Mar 04 PHP
php简单分页类实现方法
Feb 26 PHP
smarty模板引擎基础知识入门
Mar 30 PHP
php简单防盗链实现方法
Jul 29 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
深入剖析浏览器退出之后php还会继续执行么
May 17 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
python动态加载变量示例分享
2014/02/17 Python
Linux下Python获取IP地址的代码
2014/11/30 Python
Python断言assert的用法代码解析
2018/02/03 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
python数据爬下来保存的位置
2020/02/17 Python
python如何更新包
2020/06/11 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
培训研修方案
2014/06/06 职场文书
励志演讲稿600字
2014/08/21 职场文书
教师年度考核个人总结
2015/02/12 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
驻村工作简报
2015/07/20 职场文书