php+redis 简易的实现文章发布系统(用户投票系统)
/**
* @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,有情投意合者一起多多交流呀,O(∩_∩)O。
php+redis 简易的实现文章发布系统(用户投票系统)的更多相关文章
- django用户投票系统详解
投票系统之详解 1.创建项目(mysite)与应用(polls) django-admin.py startproject mysite python manage.py startapp polls ...
- useradd---创建的新的系统用户
useradd命令 useradd命令用于Linux中创建的新的系统用户.useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号.使用user ...
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第十二节)
好的,那么在上一节中呢,评论功能的后台已经写好了,这一节,先把这部分后台代码和前台对接一下. 1.评论功能实现 我们修改一下保存评论按钮的点击事件,用jQuery的方式获取文本框中的值,然后通过aja ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试 系列目录 我想测试EF在一百万条数据下的显示时间! ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用 我相信目前国内富文本编辑器中KindEditor 属于前 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析 系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(35)-文章发布系统②-构建项目
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(35)-文章发布系统②-构建项目 注:阅读本文,需要阅读本系列的之前文章 代码生成器下载地址(文章开头处) ...
- 使用redis构建文章投票系统
首先,我得说明这篇博客基本上就是<<redis in action>>第一章内容的读书笔记. 需求 首先,说明一下,我们的需求 用户可以发表文章,发表时,自己就默认的给自己的文 ...
- JAVAEE期末项目------文章发布系统
项目文档和代码的GitHub地址:https://github.com/xiangbaobaojojo/- 1.项目介绍 (计科四班 蔡春燕 20150141401)和我 陈香宇(计科四班 201 ...
随机推荐
- DOMContentLoaded
setTimeout(function(){ alert("settimeout"); },0); EventUtil.addHandler(window, "DOMCo ...
- iOS 之 关闭键盘
//方法一:关闭整个系统的键盘 [[[UIApplication sharedApplication] keyWindow] endEditing:YES]; //方法二:关闭当前页的键盘 [[sel ...
- Android性能优化(一)之启动加速35%
一.前言 随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,从本篇文章开始,我将开启一个Android应用性能优化的专题,从理论到实战,从入门到深挖,手把手将性能优 ...
- 记一次DG搭建过程中ORA-09925: Unable to createaudit trail file 错误
今天做Oracle DG 编写initorcl的时候,修改完以后,sqlplus就不能再登陆,一直报 ERROR: ORA-09925: Unable to createaudit trail fi ...
- LoadRunner
LoadRunner,是一种预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找LoadRunner能够对整个企业架构进行测试.通过使用LoadRunne ...
- Round-Robin负载均衡算法及其实现原理
毫无疑问,随着互联网.移动网络接入成本的降低,互联网正在日益深入地走入我们的生活,越来越成为人们获取信息的高效平台,ICP行业也顺势呈现出强劲的成长趋势,成为互联网迅猛发展形势下最大的受益者,也直接促 ...
- lufylegend库 鼠标事件 循环事件 键盘事件
lufylegend库 鼠标事件 循环事件 键盘事件 <!DOCTYPE html> <html lang="en"> <head> <m ...
- Java自然语言处理NLP工具包
1. Java自然语言处理 LingPipe LingPipe是一个自然语言处理的Java开源工具包.LingPipe目前已有很丰富的功能,包括主题分类(Top Classification).命名实 ...
- ER图,以及转化成关系模式
1.找出条件中的实体(矩形),属性(椭圆),关系(菱形)关系分为1:1,1:N,M:N,列出ER图 2. -1:1联系的转换方法 -两个实体分别转化为一个关系模式,属性即是本来的属性 -关系可以与任意 ...
- 最近总当机,IT帮网站用了1天时间成功搬家
Posted on 2017年1月22日 最近一两周,IT帮的会员.BA学员和AM学员时不时反馈网站打不开.敏捷个人APP登录不了,有时候又可以但是很慢,还有的时候电信能访问而联通网络访问不了. 这个 ...