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 分页类(模仿google)-面试题目解答
Sep 13 PHP
PHP 面向对象 PHP5 中的常量
May 05 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
Aug 07 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
PHP中使用CURL模拟登录并获取数据实例
Jul 01 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
Sep 22 PHP
PHP的PDO操作简单示例
Mar 30 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
Oct 17 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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
基于php-fpm的配置详解
2013/06/03 PHP
PHP在不同页面间传递Json数据示例代码
2013/06/08 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
很可爱的输入框
2008/08/03 Javascript
学习ExtJS accordion布局
2009/10/08 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
Python数学形态学实例分析
2019/09/06 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
运动会广播稿200字
2014/01/15 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
学期个人自我总结
2015/02/13 职场文书
辩护词范文大全
2015/05/21 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
修改MySQL的默认密码的四种小方法
2021/05/26 MySQL
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
如何解决php-fpm启动不了问题
2021/11/17 PHP