php redis实现文章发布系统(用户投票系统)

发布时间 - 2026-01-10 23:25:25    点击率:

本文实例为大家分享了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  # redis文章发布系统  # php用户投票系统  # php投票系统  # php投票系统之增加与删除投票(管理员篇)  # PHP+MySQL实现的简单投票系统实例  # PHP+MySQL投票系统的设计和实现分享  # PHP投票系统防刷票判断流程分析  # PHP实战之投票系统的实现  # 分页  # 发布系统  # 移除  # 的是  # 组中  # 是一个  # 发布时间  # 过了  # 列表中  # 情投意合  # 时间为  # 高性能  # 您已经  # 大家分享  # 截止日期  # 文章列表  # 在此基础上  # 具体内容  # 已过  # 大家多多 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  详解MySQL数据库的安装与密码配置  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  如何快速生成ASP一键建站模板并优化安全性?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  焦点电影公司作品,电影焦点结局是什么?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Python面向对象测试方法_mock解析【教程】  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  C#如何调用原生C++ COM对象详解  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel如何实现一对一模型关联?(Eloquent示例)  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Laravel中的withCount方法怎么高效统计关联模型数量  浅述节点的创建及常见功能的实现  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  清除minerd进程的简单方法  Laravel如何使用Livewire构建动态组件?(入门代码)  高性能网站服务器配置指南:安全稳定与高效建站核心方案  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  香港网站服务器数量如何影响SEO优化效果?  微信推文制作网站有哪些,怎么做微信推文,急?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  ,网页ppt怎么弄成自己的ppt?  黑客入侵网站服务器的常见手法有哪些?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  英语简历制作免费网站推荐,如何将简历翻译成英文?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  如何快速登录WAP自助建站平台?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何在景安服务器上快速搭建个人网站?  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  北京网站制作的公司有哪些,北京白云观官方网站?  SQL查询语句优化的实用方法总结  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  如何用PHP快速搭建高效网站?分步指南  如何安全更换建站之星模板并保留数据?  如何在VPS电脑上快速搭建网站?  如何快速搭建FTP站点实现文件共享?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Laravel如何生成API文档?(Swagger/OpenAPI教程)