您当前的位置:首页 > 电脑百科 > 数据库 > Redis

Redis实现注册、删除、编辑、分页功能

时间:2019-11-26 13:24:48  来源:  作者:

本文实例讲述了php+redis实现注册、删除、编辑、分页、登录、关注等功能。分享给大家供大家参考,具体如下:

主要界面

Redis实现注册、删除、编辑、分页功能

 

连接redis

redis.php

<?php
 //实例化
 $redis = new Redis();
 //连接服务器
 $a=$redis->connect("localhost",6379);
 //var_dump($a);
 //授权
 $redis->auth("107lab");

注册界面

add.php

<form action="reg.php" method="post">
 用户名:<input type="text" name="username"><br>
 密码:<input type="password" name="password"><br>
 年龄:<input type="text" name="age"><br>
 <input type="submit" value="注册">
 <input type="reset" value="重填">
</form>

注册实现

reg.php

<?php
 require("redis.php");
 $username = $_POST['username'];
 $password = md5($_POST['password']);
 $age = $_POST['age'];
 //echo $username.$password.$age;
 $uid = $redis->incr("userid");//设置自增id,相当于主键
 $redis->hMset("user:".$uid,array("uid"=>$uid,"username"=>$username,"password"=>$password,"age"=>$age));//用hash类型存储用户比较方便
 //将用户id存入一个链表中,便于统计数据
 $redis->rpush("uid",$uid);
 //将用id存入以用户名为键的字符类型中,便于查看用户是否存在。
 $redis->set("username:".$username,$uid);
 header('location:list.php');

列表页面

list.php

<a href="add.php" rel="external nofollow" >注册</a>
<?php
 require("redis.php");
 if(!empty($_COOKIE['auth'])){
 $id = $redis->get("auth:".$_COOKIE['auth']);
 $name = $redis->hget("user:".$id,"username");
?>
 欢迎您:<?php echo $name;?> <a href="logout.php" rel="external nofollow" >退出</a>
 <?php } else { ?>
 <a href="login.php" rel="external nofollow" >登录</a>
 <?php } ?>
<?php
 require("redis.php");
 //用户总数
 $count = $redis->lsize("uid");//获取链表的长度
 //echo $count;
 //页大小
 $page_size = 3;
 //当前页码
 $page_num=(!empty($_GET['page']))?$_GET['page']:1;
 //页总数
 $page_count = ceil($count/$page_size);
 $ids = $redis->lrange("uid",($page_num-1)*$page_size,(($page_num-1)*$page_size+$page_size-1));
 //var_dump($ids);
 foreach($ids as $v){
 $data[]=$redis->hgetall("user:".$v);
 }
 /*
 //以下为最初想到的分页处理,放入一个数组中,根据uid的最大值来当总个数,但是删除个别用户以后,uid不会变小,所以建议用链表,因为他有个lsize函数可以求出链表长度
 //根据userid获取所有用户
 for($i=1;$i<=($redis->get("userid"));$i++){
 $data[]=$redis->hgetall("user:".$i);
 }
 //过滤空值
 $data = array_filter($data);
 //var_dump($data);
 */
?>
<table border=1>
 <tr>
 <th>uid</th>
 <th>username</th>
 <th>age</th>
 <th>操作</th>
 </tr>
 <?php foreach($data as $v){ ?>
 <tr>
 <td><?php echo $v['uid']?></td>
 <td><?php echo $v['username']?></td>
 <td><?php echo $v['age']?></td>
 <td>
 <a href="del.php?id=<?php echo $v['uid'];?>" rel="external nofollow" >删除</a>
 <a href="mod.php?id=<?php echo $v['uid'];?>" rel="external nofollow" >编辑</a>
 <?php if(!empty($_COOKIE['auth']) && $id != $v['uid']){ ?>
 <a href="addfans.php?id=<?php echo $v['uid'];?>&uid=<?php echo $id;?>" rel="external nofollow" >加关注</a>
 <?php } ?>
 </td>
 </tr>
 <?php } ?>
 <tr>
 <td colspan="4">
 <?php if(($page_num-1)>=1){ ?>
 <a href="?page=<?php echo ($page_num-1);?>" rel="external nofollow" >上一页</a>
 <?php } ?>
 <?php if(($page_num+1)<=$page_count){ ?>
 <a href="?page=<?php echo ($page_num+1);?>" rel="external nofollow" >下一页</a>
 <?php } ?>
 <a href="?page=1" rel="external nofollow" >首页</a>
 <a href="?page=<?php echo ($page_count);?>" rel="external nofollow" >尾页</a>
 当前<?php echo $page_num;?>页
 总共<?php echo $page_count;?>页
 总共<?php echo $count;?>个用户
 </td>
 </tr>
</table>
<!--关注功能,建议用集合实现,因为集合元素唯一,并且可以容易求出两个用户粉丝之间交集与差集,进而进行好友推荐功能-->
<table border=1>
 <caption>我关注了谁</caption>
 <?php
 $data = $redis->smembers("user:".$id.":following");
 foreach($data as $v){
 $row = $redis->hgetall("user:".$v);
 ?>
 <tr>
 <td><?php echo $row['uid'];?></td>
 <td><?php echo $row['username'];?></td>
 <td><?php echo $row['age'];?></td>
 </tr>
 <?php } ?>
<table>
<table border=1>
 <caption>我的粉丝</caption>
 <?php
 $data = $redis->smembers("user:".$id.":followers");
 foreach($data as $v){
 $row = $redis->hgetall("user:".$v);
 ?>
 <tr>
 <td><?php echo $row['uid'];?></td>
 <td><?php echo $row['username'];?></td>
 <td><?php echo $row['age'];?></td>
 </tr>
 <?php } ?>
<table>

退出

logout.php

<?php
 require("redis.php");
 $username = $_POST['username'];
 $pass = $_POST['password'];
 //根据注册时存储的以用户名为键的字符类型中查找用户id
 $id = $redis->get("username:".$username);
 if(!empty($id)){
 $password = $redis->hget("user:".$id,"password");
 if(md5($pass) == $password){
 $auth = md5(time().$username.rand());
 $redis->set("auth:".$auth,$id);
 setcookie("auth",$auth,time()+86400);
 header("location:list.php");
 }
 }
?>
<form action="" method="post">
 用户名:<input type="text" name="username"/><br>
 密码:<input type="password" name="password"><br>
 <input type="submit" value="登录"/>
</form>

删除

del.php

<?php
 require("redis.php");
 $uid = $_GET['id'];
 //echo $uid;
 $username = $redis->hget("user:".$id,"username");
 $a=$redis->del("user:".$uid);
 $redis->del("username:".$username);
 $redis->lrem("uid",$uid);
 //var_dump($a);
 header("location:list.php");

编辑界面

mod.php

<?php
 require("redis.php");
 $uid = $_GET['id'];
 $data=$redis->hgetall("user:".$uid);
?>
<form action="doedit.php" method="post">
 <input type="hidden" value="<?php echo $data['uid'];?>" name="uid">
 用户名:<input type="text" name="username" value="<?php echo $data['username'];?>"><br>
 年龄:<input type="text" name="age" value="<?php echo $data['age'];?>"><br>
 <input type="submit" value="提交">
 <input type="reset" value="重填">
</form>

编辑功能

doedit.php

<?php
 require('redis.php');
 $uid = $_POST['uid'];
 $username = $_POST['username'];
 $age = $_POST['age'];
 $a=$redis->hmset("user:".$uid,array("username"=>$username,"age"=>$age));
 if($a){
 header("location:list.php");
 }else{
 header("location:mod.php?id=".$uid);
 }

加关注

addfans.php

<?php

//关注功能,建议用集合实现,因为集合元素唯一,并且可以容易求出两个用户粉丝之间交集与差集,进而进行好友推荐功能

$id = $_GET['id'];

$uid = $_GET['uid'];

require("redis.php");

$redis->sadd("user:".$uid.":following",$id);

$redis->sadd("user:".$id.":followers",$uid);

header("location:list.php");



Tags:Redis   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
来源: my.oschina.net/xiaomu0082/blog/2990388首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应...【详细内容】
2021-12-08  Tags: Redis  点击:(18)  评论:(0)  加入收藏
我不知道为什么你会选择对特定数量的“错误”(或警告)如此具体。听起来您正在寻找将要发布到 Yahoo! 的某些文章的内容。 Insider (N Foos to Blah for the BlahBlah)。那说:...【详细内容】
2021-12-07  Tags: Redis  点击:(14)  评论:(0)  加入收藏
目录 一、背景 二、步骤 0.理论支持 1、获取数据 2、结果 3、分析数据并评估大小 三、关于repl-backlog-size 一、背景 repl-backlog-size控制这个环形缓冲区. ​ 主从断...【详细内容】
2021-11-05  Tags: Redis  点击:(41)  评论:(0)  加入收藏
Redis 性能测试是通过同时执行多个命令实现的。1,Redis-benchmarkRedis性能命令:redis性能命令格式: redis-benchmark [option] [option value] redis 性能测试工具可选参数如...【详细内容】
2021-11-02  Tags: Redis  点击:(41)  评论:(0)  加入收藏
1 概述数据结构和内部编码 无传统关系型数据库的 Table 模型schema 所对应的db仅以编号区分。同一 db 内,key 作为顶层模型,它的值是扁平化的。即 db 就是key的命名空间。 key...【详细内容】
2021-11-01  Tags: Redis  点击:(28)  评论:(0)  加入收藏
普通java中使用引用Java redis 驱动,即可连接:import redis.clients.jedis.Jedis; public class RedisTestJava { public static void main(String[] args) { //连...【详细内容】
2021-10-13  Tags: Redis  点击:(34)  评论:(0)  加入收藏
Redis常用的数据结构有 string list set zset hashstringstring 是 Redis 的基本的数据类型,一个 key 对应一个 value。string 类型是二进制安全的,Redis的string可以包含任...【详细内容】
2021-10-12  Tags: Redis  点击:(36)  评论:(0)  加入收藏
列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入、弹出数据,可以充当栈和队列的角色。> LPUSH fruit apple(integer) 1> RPUSH fruit banana(integer)...【详细内容】
2021-09-17  Tags: Redis  点击:(54)  评论:(0)  加入收藏
Redis持久化意义 是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你的redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用 大量的请...【详细内容】
2021-08-12  Tags: Redis  点击:(77)  评论:(0)  加入收藏
Nginx来限制访问控制的方法有多种,nginx主要有2个模块控制,但是那些不支持自定义,非常死,在大多数场景下并不实用。今天分享一个:利用openresty+lua+redis 实现封杀频繁恶意访问I...【详细内容】
2021-08-12  Tags: Redis  点击:(119)  评论:(0)  加入收藏
▌简易百科推荐
来源: my.oschina.net/xiaomu0082/blog/2990388首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应...【详细内容】
2021-12-08  Java识堂    Tags:Redis   点击:(18)  评论:(0)  加入收藏
我不知道为什么你会选择对特定数量的“错误”(或警告)如此具体。听起来您正在寻找将要发布到 Yahoo! 的某些文章的内容。 Insider (N Foos to Blah for the BlahBlah)。那说:...【详细内容】
2021-12-07  富集云科技有限公司    Tags:Redis   点击:(14)  评论:(0)  加入收藏
目录 一、背景 二、步骤 0.理论支持 1、获取数据 2、结果 3、分析数据并评估大小 三、关于repl-backlog-size 一、背景 repl-backlog-size控制这个环形缓冲区. ​ 主从断...【详细内容】
2021-11-05  弈秋的美好生活    Tags:redis   点击:(41)  评论:(0)  加入收藏
Redis 性能测试是通过同时执行多个命令实现的。1,Redis-benchmarkRedis性能命令:redis性能命令格式: redis-benchmark [option] [option value] redis 性能测试工具可选参数如...【详细内容】
2021-11-02  川石信息    Tags:Redis   点击:(41)  评论:(0)  加入收藏
1 概述数据结构和内部编码 无传统关系型数据库的 Table 模型schema 所对应的db仅以编号区分。同一 db 内,key 作为顶层模型,它的值是扁平化的。即 db 就是key的命名空间。 key...【详细内容】
2021-11-01  JavaEdge    Tags:Redis   点击:(28)  评论:(0)  加入收藏
普通java中使用引用Java redis 驱动,即可连接:import redis.clients.jedis.Jedis; public class RedisTestJava { public static void main(String[] args) { //连...【详细内容】
2021-10-13  faesuite    Tags:Redis   点击:(34)  评论:(0)  加入收藏
Redis常用的数据结构有 string list set zset hashstringstring 是 Redis 的基本的数据类型,一个 key 对应一个 value。string 类型是二进制安全的,Redis的string可以包含任...【详细内容】
2021-10-12  语霖    Tags:Redis   点击:(36)  评论:(0)  加入收藏
列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入、弹出数据,可以充当栈和队列的角色。> LPUSH fruit apple(integer) 1> RPUSH fruit banana(integer)...【详细内容】
2021-09-17  深夜敲代码    Tags:Redis   点击:(54)  评论:(0)  加入收藏
Redis持久化意义 是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你的redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用 大量的请...【详细内容】
2021-08-12  小李说IT    Tags:Redis   点击:(77)  评论:(0)  加入收藏
当查询Redis中没有的数据时,该查询会下沉到数据库层,同时数据库层也没有该数据,当这种情况大量出现或被恶意攻击时,接口的访问全部透过Redis访问数据库,而数据库中也没有这些数据...【详细内容】
2021-07-30  随便t    Tags:缓存穿透   点击:(91)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条