Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查)
1. PHP 连接 Redis
访问 redis 官方网站的 client 栏目:http://www.redis.io/clients#php,可以获取 redis 的 php 扩展。
其中 phpredis 扩展比较稳定,功能也比较全,属于一个第三方扩展,但是已经被 PHP 官方授权,它的方法名和客户端下的方法名基本一致。github 地址:https://github.com/phpredis/phpredis,方法在这里也能查得到。
① 下载 phpredis 的源代码包,解压、配置、编译、安装;
② 编辑 php.ini,给 PHP 打上 redis 模块(extension=redis.so);
③ 写一个 phpinfo 的页面,访问,找到 redis 扩展:
(这三步之前已经做过,参见:http://www.cnblogs.com/dee0912/p/4343032.html)
④ 配置 Samba 服务器
(在一些中小型网络,或者企业的内部网中,利用Linux建立文件服务器是一个很好的解决方案。针对企业内部网中的绝大部分客户机采用Windows的情况,我们可以通过使用 Samba 来实现文件服务器功能。 )
打开光盘源:
勾选“已连接”,选择 ISO 镜像文件,确定:
挂载光盘镜像:
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
yum 安装 samba(跳过有损的依赖包):
[root@localhost ~]# yum -y install samba* --skip-broken
安装完之后配置 samba 文件:
[root@localhost ~]# vi /etc/samba/smb.conf
加几个虚拟目录:
[web]
path = /usr/local/apache2/htdocs
browseable = yes
writable = yes
browseable:可预览
保存退出。
重启 smb 服务:
[root@localhost ~]# service smb restart
如果提示:smb: 未被识别的服务,则说明没有安装完全,重新:
[root@localhost ~]# yum install samba
重新执行重启 smb 服务:
给 samba 服务其添加用户(apache):
[root@localhost ~]# smbpasswd -a apache
New SMB password:
Retype new SMB password:
Failed to add entry for user apache.
[root@localhost ~]#
如果报错:Failed to add entry for user apache.
说明这是因为没有加相应的系统账号,所以会提示Failed to add entry for user的错误,只需增加相应的系统账号test就可以了(参见《增加samba用户提示Failed to add entry for user》):
[root@localhost ~]# groupadd apache -g
You have new mail in /var/spool/mail/root
[root@localhost ~]# useradd apache -u -g -s /sbin/nologin -d /dev/null
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
[root@localhost ~]# mkdir /home/apache
[root@localhost ~]# chown /home/apache
You have new mail in /var/spool/mail/root
[root@localhost ~]# smbpasswd -a apache
New SMB password:
Retype new SMB password:
Mismatch - password unchanged.
Unable to get new password.
[root@localhost ~]# smbpasswd -a apache
New SMB password:
Retype new SMB password:
Added user apache.
You have new mail in /var/spool/mail/root
用户名:apache,密码:123
⑤ 在 windows 下对 linux 进行映射:
输入映射文件夹:
输入用户名:apache,密码:123,确定:
登陆之后:
在目录中建立一个 redis 目录,提示没有权限:
原因:apache 用户对本目录没有操作权限
解决方案:
[root@localhost ~]# setfacl -m d:u:apache:rwx -R /usr/local/apache2/htdocs
查看 facl 权限:
[root@localhost ~]# getfacl /usr/local/apache2/htdocs/
getfacl: Removing leading '/' from absolute path names
# file: usr/local/apache2/htdocs/
# owner: apache
# group: apache
user::rwx
user:apache:rwx
group::r-x
mask::rwx
other::rwx
default:user::rwx
default:user:apache:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
如果还不行,则参照:《Samba服务中,不能创建文件夹和文本文件_解决办法》:
[root@localhost ~]# vi /etc/selinux/config
重启 Linux 服务器:
reboot
⑥ (在 test 目录下)重新创建 redis 目录,在 redis 目录中创建文件 redis.php,打开该文件,编辑:
<?php
//实例化 Redis 对象
$redis = new Redis();
//连接到 Redis 服务器
$a = $redis->connect('localhost', 6379); //连接地址; 端口号; 连接时长,默认为0,不受限制
var_dump($a);
启动 apache:
/usr/local/apache2/bin/apachectl start
访问:192.168.254.100/redis/redis.php,输出:
bool(true)
表示连接 redis 服务已经成功。
此时登录客户端,输入 keys *:
[root@localhost ~]# redis-cli -a phpdee
127.0.0.1:6379> keys *
(empty list or set)
当前库中没有键;
同时可以在 redis.php 中使用 keys() 方法(要先授权,否则返回 bool(false) ):
<?php
//实例化 Redis 对象
$redis = new Redis();
//连接到 Redis 服务器
$a = $redis->connect('localhost', 6379); //连接地址; 端口号; 连接时长,默认为0,不受限制
//var_dump($a);
$data = $redis->keys('*');
var_dump($data);
访问:192.168.254.100/redis/redis.php,输出:
array(0) { }
当前库中没有键。
此时在 redis.php 中使用 set() 方法创建一个键值对:
<?php
//实例化 Redis 对象
$redis = new Redis();
//连接到 Redis 服务器
$a = $redis->connect('localhost', 6379); //连接地址; 端口号; 连接时长,默认为0,不受限制
//var_dump($a);
//授权
$redis->auth('phpdee');
//设置一个键值对
$redis->set('name', 'dee');
//获取 name 的值
$name = $redis->get('name');
var_dump($name);
//获取库中所有的键
$data = $redis->keys('*');
var_dump($data);
访问:192.168.254.100/redis/redis.php,输出:
string(3) "dee" array(1) { [0]=> string(4) "name" }
说明 set() 方法成功。
在 linux redis 客户端中再次查询库中的键:
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"dee"
同样获取到了 key 为 name 的值。
【总结】操作步骤:实例化 redis 对象→连接 redis 服务器→授权→相关操作
相关操作:
使用 hash 类型存储用户信息
在 test 目录下新建 add.php(添加用户的界面,提交到 reg.php):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP+Redis信息管理系统</title>
</head>
<body>
<form action="reg.php" method="post">
<table align="left">
<tr><td>用户名:</td><td><input type="text" name="username"></td></tr>
<tr><td>密码:</td><td><input type="password" name="password" id=""></td></tr>
<tr><td>年龄:</td><td><input type="text" name="age" id=""></td></tr>
<tr><td><input type="submit" value="注册"></td><td><input type="reset" value="重填"></td></tr>
</table>
</form>
</body>
</html>
界面:
reg.php(添加用户的操作):
<?php
require 'redis.php'; $username = $_POST['username'];
$password = md5($_POST['password']);
$age =$_POST['age'];
//uid 自加
//当有 userid 这个键时,执行 incr时该键的值加1;不存在该键时,创建一个 userid,值为0,执行incr,值为1
$uid = $redis->incr('userid'); //向 hash 表中批量添加数据:hMset
$redis->hMset('user:'.$uid, array('uid'=>$uid, 'name'=>$username, 'password'=>$password, 'age'=>$age)); //跳转
header('location:list.php');
redis.php(实例化 redis 对象并连接 redis 服务器,同时授权):
<?php
//实例化 Redis 对象
$redis = new Redis();
//连接到 Redis 服务器
$redis->connect('localhost', 6379); //连接地址; 端口号; 连接时长,默认为0,不受限制
//授权
$redis->auth('phpdee');
list.php(显示所有用户列表的界面,提供删除、编辑操作):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户信息列表</title>
</head>
<body>
<a href="add.php">返回注册页面</a> <?php
require 'redis.php';
for( $i = 1; $i <= $redis->get('userid'); $i++ ){
$data[] = $redis->hgetall('user:'.$i);
//过滤数组中的空元素
$data = array_filter($data);
}
?>
<table border="1" cellspacing="0" cellpadding="5">
<tr>
<th>uid</th>
<th>name</th>
<th>age</th>
<th>操作</th>
</tr>
<?php foreach($data as $v){ ?>
<tr>
<td><?php echo $v['uid']?></td>
<td><?php echo $v['name']?></td>
<td><?php echo $v['age']?></td>
<td><a href="del.php?uid=<?php echo $v['uid'];?>">删除</a> | <a href="mod.php?uid=<?php echo $v['uid'];?>">编辑</a></td>
</tr>
<?php } ?>
</table>
</body>
</html>
在 http://192.168.254.100/redis/add.php 中输入信息,注册(例如姓名:dee,密码:123,年龄:25);
注册完之后进入 redis 客户端:
127.0.0.1:6379> keys *
1) "userid"
2) "user:1" 127.0.0.1:6379> get userid
"1" 127.0.0.1:6379> hgetall user:1
1) "uid"
2) "1"
3) "name"
4) "dee"
5) "password"
6) "202cb962ac59075b964b07152d234b70"
7) "age"
8) "25"
多次测试之后访问 http://192.168.254.100/redis/list.php:
del.php(删除用户信息的操作):
<?php
require 'redis.php'; $uid = $_GET['uid'];
$redis->del('user:'.$uid);
header('location:list.php');
mod.php(编辑用户信息的界面,和 add.php 相似):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>编辑用户</title>
</head>
<body>
<?php
require 'redis.php'; $uid = $_GET['uid'];
$data = $redis->hgetall('user:'.$uid);
?>
<form action="doEdit.php" method="post">
<table align="left">
<tr><td>用户名:</td><td><input type="text" name="username" value="<?php echo $data['name'];?>"></td></tr>
<tr><td>年龄:</td><td><input type="text" name="age" value="<?php echo $data['age'];?>"></td></tr>
<tr><td><input type="submit" value="修改"></td><td><input type="hidden" name="uid" value="<?php echo $data['uid'];?>"></td></tr>
</table>
</form>
</body>
</html>
doEdit.php(编辑用户的操作):
<?php
require 'redis.php'; $uid = $_POST['uid'];
$name = $_POST['username'];
$age = $_POST['age']; //执行批量更改
$res = $redis->hmset('user:'.$uid, array('name'=>$name, 'age'=>$age));
//跳转
if($res){
header('location:list.php');
}
【附】查看 redis 服务是否启动:
[root@localhost ~]# netstat -tunpl | grep
tcp 0.0.0.0: 0.0.0.0:* LISTEN /redis-server *
tcp ::: :::* LISTEN /redis-server *
Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查)的更多相关文章
- 【EF学习笔记09】----------使用 EntityState 枚举标记实体状态,实现增删改查
讲解之前,先来看一下我们的数据库结构:班级表 学生表 如上图,实体状态由EntityState枚举定义:Detached(未跟踪).Unchanged(未改变).Added(已添加).Deleted( ...
- 【Redis笔记(四)】 Redis数据结构 - list链表
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50573605 经过前面的介绍,我们学习了Redis中string字符串.hash ...
- Redis入门之增删改查等常用命令总结
Redis是用C语言实现的,一般来说C语言实现的程序"距离"操作系统更近,执行速度相对会更快. Redis使用了单线程架构,预防了多线程可能产生的竞争问题. 作者对于Redis源代 ...
- 第三课作业——set类型、sorted set类型的增删改查,redis的事务
第三课时作业 静哥 by 2016.2.23~2016.3.6 [作业描述] 1.总结什么是set以及什么是sorted set,并完成对set以及sorted set的增删改查(查需要至少4种方 ...
- Redis的增删改查命令总结与持久化方式
原文:Redis的增删改查命令总结与持久化方式 Redis是用C语言实现的,一般来说C语言实现的程序"距离"操作系统更近,执行速度相对会更快. Redis使用了单线程架构,预防了多 ...
- Redis的增删改查、持久化你会了吗
原文:Redis的增删改查.持久化你会了吗 Redis是用C语言实现的,一般来说C语言实现的程序"距离"操作系统更近,执行速度相对会更快. Redis使用了单线程架构,预防了多线程 ...
- Redis简单的数据操作(增删改查)
#Redis简单的数据操作(增删改查): 字符串类型 string 1. 存储: set key value 127.0.0.1:6379> set username zhangsan OK 2 ...
- python全栈开发中级班全程笔记(第二模块、第三章)(员工信息增删改查作业讲解)
python全栈开发中级班全程笔记 第三章:员工信息增删改查作业代码 作业要求: 员工增删改查表用代码实现一个简单的员工信息增删改查表需求: 1.支持模糊查询,(1.find name ,age fo ...
- 使用控制台对Redis执行增删改查命令
使用控制台对Redis执行增删改查命令 在上一篇里,我们已经安装了redis.这一篇我们将一起来学习如何使用"控制台"管理Redis 首先肯定是打开一个控制台,在windows系统 ...
- Java连接Redis之redis的增删改查
一.新建一个maven工程,工程可以以jar的形式或war都行,然后导入正确的依赖 <project xmlns="http://maven.apache.org/POM/4.0.0& ...
随机推荐
- spring的IOC和AOP
spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...
- 微信jsapi接口测试
微信jsapi接口测试 <?php require_once 'lib.inc.php'; $wx = new WxApi(); if(!isset($_GET['code'])){ heade ...
- 解决Inno Setup制作安装包无法创建桌面快捷方式的问题
转自:http://yedward.net/?id=104 昨天想把个java程序做成exe安装软件,然后就去下载了Inno Setup这个软件安装包制作软件,Inno Setup这个软件确实非常好用 ...
- jmeter断言
响应断言:检查的内容,如果是变量,设置为变量 断言结果:断言的结果 断言持续时间:请求事件不能超过设置的断言持续时间 Size Assertion:断言字节大小
- Java 时间架构图
Java 的Calendar,Date,TimeZone,Locale和DateFormat的关系图如下: 说明: milliseconds表示毫秒. milliseconds = "实际时 ...
- HDU2296 Ring(AC自动机+DP)
题目是给几个带有价值的单词.而一个字符串的价值是 各单词在它里面出现次数*单词价值 的和,问长度不超过n的最大价值的字符串是什么? 依然是入门的AC自动机+DP题..不一样的是这题要输出具体方案,加个 ...
- ubuntu桌面进不去,我跪了
ubuntu12.04 输入密码正确,但仍然跳回到登陆界面,实在受不了啊! 不知道bug再哪里,但是有个方法真是屡试不爽啊.. ctrl+alt+f1切换到字符界面 /home/xxx/.Xautho ...
- BZOJ 1067 & Interval_Tree
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3099 Solved: 800 Description 我们常常 ...
- 【BZOJ】1055: [HAOI2008]玩具取名(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1055 我竟然都没往dp这个方向想.....百度了下看到标题是dp马上就会转移了QAQ... 设d[i ...
- 【wikioi】1269 匈牙利游戏(次短路+spfa)
http://www.wikioi.com/problem/1269/ 噗,想不到.. 次短路就是在松弛的时候做下手脚. 设d1为最短路,d2为次短路 有 d1[v]>d1[u]+w(u, v) ...