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

本文实例为大家分享PHP实现文章发布系统、用户投票系统的具体代码,供大家参考,具体内容如下

redis; $key= "queue"; $ONE_WEEK_IN_SECONDS= 7*86400; $redis -> multi($key); //生成新的文章id $article_id = $redis -> incr("article:",$key);
//<a href="https://www.jb51.cc/tag/wenzhang/" target="_blank" class="keywords">文章</a>已投票<a href="https://www.jb51.cc/tag/yonghuming/" target="_blank" class="keywords">用户名</a>单
$<a href="https://www.jb51.cc/tag/Vote/" target="_blank" class="keywords">Vote</a>d = "<a href="https://www.jb51.cc/tag/Vote/" target="_blank" class="keywords">Vote</a>d:".$article_id;
$this->re<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>->sadd($<a href="https://www.jb51.cc/tag/Vote/" target="_blank" class="keywords">Vote</a>d,$user,$key);
//设置过期时间(为1周)
$this->re<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a>->expipre($<a href="https://www.jb51.cc/tag/Vote/" target="_blank" class="keywords">Vote</a>d,$ONE_WEEK_IN_SECONDS,$key);

//<a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>现在的时间
$<a href="https://www.jb51.cc/tag/Now/" target="_blank" class="keywords">Now</a> =time();
$article = "article:".$article_id;
$data = ['title'=>'测试1','link'=>'www.hahaha.com','poster'=>$user,'tine'=>$<a href="https://www.jb51.cc/tag/Now/" target="_blank" class="keywords">Now</a>,'<a href="https://www.jb51.cc/tag/Vote/" target="_blank" class="keywords">Vote</a>s'=>1];
//$data = json_encode($data);
$re<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a> -> hmset($article,$data,$key);

//将<a href="https://www.jb51.cc/tag/wenzhang/" target="_blank" class="keywords">文章</a><a href="https://www.jb51.cc/tag/tianjia/" target="_blank" class="keywords">添加</a>到根据时间排序有序集合和根据评分排序有序结合中
$this -> re<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a> -> zadd("<a href="https://www.jb51.cc/tag/score/" target="_blank" class="keywords">score</a>:",1,$article,$key);
$this -> re<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a> -> zadd("time:",$<a href="https://www.jb51.cc/tag/Now/" target="_blank" class="keywords">Now</a>,$key);

$re<a href="https://www.jb51.cc/tag/dis/" target="_blank" class="keywords">dis</a> -> exec($key);

}

<div class="jb51code">
<pre class="brush:php;">
/**

  • @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:',$key) < $cutoff){
    var_dump("该文章已过投票时间!");exit;
    }
    $article_id = explode(':',$article)['1'];
    if($redis->sadd('Voted:'.$article_id,$key)){
    $redis -> zincrby('score:',$key);
    $redis -> hincrby($article,'Votes',$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,$db);
    }
    foreach($to_remove as $key=>$val){
    $redis -> srem('grouo:'.$val,$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,有情投意合者一起多多交流呀。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐


    服务器优化必备:深入了解PHP8底层开发原理
    Golang的网络编程:如何快速构建高性能的网络应用?
    Golang和其他编程语言的对比:为什么它的开发效率更高?
    PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
    将字符重新排列以形成回文(如果可能)在C++中
    掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
    服务器性能优化必学:掌握PHP8底层开发原理
    PHP8新特性和底层开发原理详解:优化应用性能的终极指南
    将 C/C++ 代码转换为汇编语言
    深入研究PHP8底层开发原理:创建高效可扩展的应用程序
    C++程序查找法向量和迹
    PHP8底层开发原理实战指南:提升服务器效能
    重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
    Golang的垃圾回收:为什么它可以减少开发人员的负担?
    C++程序:将一个数组的所有元素复制到另一个数组中
    Golang:构建智能系统的基石
    为什么AI开发者应该关注Golang?
    在C和C++中,逗号(comma)的用法是用来分隔表达式或语句
    PHP8底层开发原理解析及新特性应用实例
    利用PHP8底层开发原理解析新特性:如何构建出色的Web应用