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

本文实例为大家分享了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,有情投意合者一起多多交流呀。

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

时间: 2024-08-02 02:06:47

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

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用 我相信目前国内富文本编辑器中KindEditor 属于前列,详细的中文帮助文档,简单的加载方式,可以定制的轻量级.都是系统的首选 很多文章教程有kindeditor的使用,但本文比较特别可能带有,上传文件的缩略图和水印的源码!这块也是比较复杂和备受关注的功能 一.下载编辑器 KindEditor 4.1.10 (2013-11-23) [1143KB]

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析 系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Android的基本开发构成,我还是会持续更新本系列的一些知识点的用法. 说句实在话,我很佩服那些能连续好几年每个星期都有一篇文章的人,能坚持真是一种幸福. 一张图回顾一下我们做了那

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试 系列目录 我想测试EF在一百万条数据下的显示时间!这分数据应该有很多同学想要,看看EF的性能! 服务器 现在来向SQL2008R2插入1000000条数据吧 declare @i int; set @i=0; while @i<1000000 begin INSERT INTO [AppDB].[dbo].[MIS_Article] ([Id] ,

java 文章发布-利用java系统做个文章发布求思路

问题描述 利用java系统做个文章发布求思路 利用java做一个文章发布系统 初期的想法是使用Spring+Hibernate 在数据库取出的内容如何显示在页面 是用request么? 新手一只求指导 解决方案 数据库资源宝贵,肯定不能把源文件存进去,可以存文件名,再根据文件名到某一路径下获取该文件,使用浏览器可以在线预览或者下载!

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(35)-文章发布系统②-构建项目

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(35)-文章发布系统②-构建项目 注:阅读本文,需要阅读本系列的之前文章 代码生成器下载地址(文章开头处)  接下来我们建立数据库的表和各层的代码 我们只需要两张表,文章列表(MIS_Article)和类别表(MIS_Article_Category) USE [AppDB] GO /****** Object: Table [dbo].[MIS_Article] Script Date: 05/15/

nodejs教程之制作一个简单的文章发布系统_node.js

前言 我们今天就来做一个简单的新闻发布系统,系统第一阶段不需要太难,主要有以下功能 ① 新闻类型管理 ② 新闻管理(具有图片上传功能) ③ 新闻浏览 功能虽然不多,但是也涵盖很多基本操作了,程序不过增删查改嘛,外加上传附件,够了.于是开始我们今天的学习吧 准备工作 根据昨天的折腾后,我们已经有了nodeJS与mongoDB环境了,现在直接新建工程文件与数据库文件即可 第一步,打开命令符切换到D盘后输入 复制代码 代码如下: D:\>express -e news 于是系统会自动开开心心构建基本环

跪求c#的文章发布系统+论坛

问题描述 跪求c#的文章发布系统+论坛感激不尽,请各位大虾提供线索,或者发我邮箱121587955@qq.com

投票系统如何防止一个用户多次投票

最简单的方法就是在用户投票以后记录下一定信息,每次投票时就检测这个特定信息是否存在.实现的方法我想到了3种,具体如下: 1,用Page.Session: private void saveInSession() { if(Page.Session["ok"]==null) { Vote(); Page.Session["ok"]=1; } else { NoVote(); } } 2,用Request.Cookies; private void saveInCook

PHP生成静态HTML文章发布系统的思路

1.需要一个session文件,这个当然是用来判断是否是管理员的php文件了. 2.需要一个getip.php的文件,这个是取得来路ip的,也是用于管理员判断的. 3.正式开始核心的文件了.在html.php中,需要一个form,用于登录的.当然这个form的action也是它自己.post之后进入一个文章发布的页面.这个页面是一个title和一个content两个部分.其中title就是你的标题,content是正文.content部分的输入我是使用了fckeditor.挺好用的一个编辑器.然