一、用户注册登录

  

    include './header.php';
include './function.php'; $username = p('username');
$password = p('password');
$password2 = p('password2'); if ($password != $password2) {
redirect("./login.php", "两次密码输入不一致", 3);
} if (!$username || !$password) {
redirect("./login.php", "请输入用户名或秘密", 3);
} $redis = connRedis();
/*
用户表设置
user:id:1:username
user:id:1:password user:username 1
*/
$id = $redis->incr("global:user");
$redis->set("user:id:$id:username", $username);
$redis->set("user:id:$id:password", $password);
$redis->set("user:username:$username", $id); //维护一个最新50个用户的表
$redis->lpush("newuser", $id);
$redis->ltrim("newuser", 0, 49); redirect("./login.php", "用户名:$username 注册成功", 3);
   include './header.php';
include './function.php'; $username = p('username');
$password = p('password');
if (!$username || !$password) {
redirect("./login.php", "请输入用户名或秘密", 3);
} $redis = connRedis();
$id = $redis->get("user:username:$username");
$oldPassword = $redis->get("user:id:$id:password");
closeRedis($redis);
if ($password != $oldPassword) {
redirect("./login.php", "用户名或秘密不正确", 3);
}
//设置cookie
setcookie("id", $id);
setcookie("username", $username);
setcookie("password", $password);
redirect("./home.php", "登录成功", 3);

二、发表动态

  

    include './header.php';
include './function.php'; $status = p('status');
if (empty($status)) {
redirect("./home.php", "请输入内容", 3);
}
/*
post表(发动态表)
post:id:1:uid
post:id:1:content
*/
$redis = connRedis();
$id = $redis->incr("global:post"); $redis->hMset("post:id:$id", array("uid" => $_COOKIE['id'], "content" => $status, "time" => date("Y-m-d H:i:s", time()), "username" => $_COOKIE['username'])); //最近50条发布的信息
$redis->lpush("newpost", $id);
$redis->ltrim("newpost", 0, 49); //获取我的粉丝,并把我的动态发给他
$fans = $redis->smembers("flowing:userid:{$_COOKIE['id']}");
$fans[] = $_COOKIE['id'];
foreach ($fans as $fansid) {
$redis->lpush("receivepost:$fansid", $id);
}

三、关注页

    include './header.php';
include './function.php'; $uid = g("uid");
$f = g("f");
$redis = connRedis();
$u = $redis->get("user:id:$uid:username");
if (!$u) {
redirect("./home.php", "非法数据", 3);
}
if ($f) {
//关注
$redis->sAdd("flow:userid:{$_COOKIE['id']}", $uid);
$redis->sAdd("flowing:userid:$uid", $_COOKIE['id']);
$msg = "关注成功";
}else{
//取消
$redis->srem("flow:userid:{$_COOKIE['id']}", $uid);
$redis->srem("flowing:userid:$uid", $_COOKIE['id']);
$msg = "取消关注成功";
}
redirect("./profile.php?u=$u", $msg, 3);

四、热点页

  

    include_once("./header.php");
include_once("./function.php");
if (!$_COOKIE['id']) {
redirect("./login.php", "请先登录", 3);
}
$redis = connRedis();
$data = $redis->sort("newuser", array("get" => "user:id:*:username", "limit" => array(0,1), "sort" => "desc"));
//获取最新发布的动态id
$newpost = $redis->lRange("newpost", 0, -1);

Redis 之仿微博demo的更多相关文章

  1. Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展

    本文由“猫爸iYao”原创分享,感谢作者. 1.引言 最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样:   ▲ 微信群聊界面里的@人功能    ▲ QQ群聊界面里 ...

  2. 仿微博视频边下边播之滑动TableView自动播放-b

    Tips:这次的内容分为两篇文章讲述01.[iOS]仿微博视频边下边播之封装播放器 讲述如何封装一个实现了边下边播并且缓存的视频播放器.02.[iOS]仿微博视频边下边播之滑动TableView自动播 ...

  3. Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解

    一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis, ...

  4. iOS界面流畅技巧之微博 Demo 性能优化技巧

    微博 Demo 性能优化技巧 我为了演示 YYKit 的功能,实现了微博和 Twitter 的 Demo,并为它们做了不少性能优化,下面就是优化时用到的一些技巧. 预排版 当获取到 API JSON ...

  5. android 表情,软键盘冲突解决方案(仿微博等SNS应用)

    之前总想搞一下这个模块,可是由于忙碌总是推迟,现在就把这块好好的弥补过来,下面是我实现的思路.本人才疏学浅,还望大家不要见笑. 首先我们还是先看写示例:            上面应用应该不用我过多介 ...

  6. h5聊天室web端(仿微博、微信)|h5仿微信网页端|仿微信界面弹窗

    这段时间一直在着手h5开发手机端聊天系统——html5仿微信聊天室,最近又在原先基础上开发了一个仿微信.微博网页web版聊天系统,使用到了HTML5+css3+jQuery+wcpop等技术开发,弹窗 ...

  7. redis+php实现微博功能(二)

    数据结构: set post:postid:3:time timestampset post:postid:3:userid 5 set post:postid:3:content 测试发布哈哈哈哈 ...

  8. redis+php实现微博功能(一)

    (一).微博功能概况 微博用户账号注册 微博用户登录 微博发布 添加微博好友(粉丝) 微博推送 微博冷数据写入mysql数据库 (二).redis数据结构设计 这节分享微博用户注册与登录:我们完全采用 ...

  9. 仿微博——MJExtension之字典转模型

    1.模型类中定义好属性 2.用AFN请求下来的数据保存到字典中 3.从字典中取出微博字典数组 //微博字典数组 NSArray *restrictArray = responseObject[@&qu ...

随机推荐

  1. JFrame实现批量获取Android安装包安全证书MD5

    今天遇到一个需求.获取全部apk的签名的MD5.以下是我使用Java SE实现的一个工具.贴出核心源码.希望给有须要的朋友有所帮助. 界面例如以下: 仅仅须要制定.apk文件所在的文件夹就可以,核心代 ...

  2. FFmpeg总结(三)AV系列结构体之AVCodecContext

    位置: 描写叙述:主要扩展API的结构体 New fields can be added to the end with minor version bumps. Removal, reorderin ...

  3. Vim 经常使用快捷键及键盘图

    Vim经常使用的快捷键 h - 光标左移一个字符   j - 光标下移一个字符 k - 光标上移一个字符   l - 光标右移一个字符  下移15行 - 15j Ctrl + f - 屏幕向下移动一页 ...

  4. 浅谈java缓存

    java中要用到缓存的地方很多,首当其冲的就是持久层缓存,针对持久层谈一下: 要实现java缓存有很多种方式,最简单的无非就是static HashMap,这个显然是基于内存缓存,一个map就可以搞定 ...

  5. click事件触发也有失灵的时候?

    今天做了个手机页面,点击某个按钮->弹出菜单,再点击菜单以外的任意位置->关闭菜单,在其他浏览器里面没有问题,但是在IOS浏览器中并不会关闭. 网上解决这个bug的帖子很多,这篇帖子主要是 ...

  6. poj 2104 K-th Number 主席树+超级详细解释

    poj 2104 K-th Number 主席树+超级详细解释 传送门:K-th Number 题目大意:给出一段数列,让你求[L,R]区间内第几大的数字! 在这里先介绍一下主席树! 如果想了解什么是 ...

  7. JSP-Runoob:JSP 服务器响应

    ylbtech-JSP-Runoob:JSP 服务器响应 1.返回顶部 1. JSP 服务器响应 Response响应对象主要将JSP容器处理后的结果传回到客户端.可以通过response变量设置HT ...

  8. bzoj3940

    AC自动机 复习一下... 可惜又写错了 我们发现就是把单词建成ac自动机,然后把串在ac自动机上跑一遍,每到一个单词结束点就删除,删除是利用栈,每次弹出单词长度个字符就可以了 发现两个小问题,str ...

  9. 43. ExtJs控件属性配置详细

    转自:https://www.cnblogs.com/mannixiang/p/6558225.html 序言:    1.本文摘自网络,看控件命名像是4.0以前的版本,但控件属性配置仍然可以借鉴(不 ...

  10. 8.3 TCPIP协议族

    接下来我们要学习的内容是TCP/IP协议族.TCP/IP协议族在网络系统中是非常重要的.这一个协议族当中牵涉到许许多多的我们平常所用到的协议.TCP/IP呢它也有分层模型.然后我们讲到的就是三方面的内 ...