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 镜像文件,确定:

挂载光盘镜像:

  1. [root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
  2. mount: block device /dev/sr0 is write-protected, mounting read-only

yum 安装 samba(跳过有损的依赖包):

  1. [root@localhost ~]# yum -y install samba* --skip-broken

安装完之后配置 samba 文件:

  1. [root@localhost ~]# vi /etc/samba/smb.conf

加几个虚拟目录:

  1. [web]
  2. path = /usr/local/apache2/htdocs
  3. browseable = yes
  4. writable = yes

browseable:可预览

保存退出。

重启 smb 服务:

  1. [root@localhost ~]# service smb restart

如果提示:smb: 未被识别的服务,则说明没有安装完全,重新:

  1. [root@localhost ~]# yum install samba

重新执行重启 smb 服务:

给 samba 服务其添加用户(apache):

  1. [root@localhost ~]# smbpasswd -a apache
  2. New SMB password:
  3. Retype new SMB password:
  4. Failed to add entry for user apache.
  5. [root@localhost ~]#

如果报错:Failed to add entry for user apache.

说明这是因为没有加相应的系统账号,所以会提示Failed to add entry for user的错误,只需增加相应的系统账号test就可以了(参见《增加samba用户提示Failed to add entry for user》):

  1. [root@localhost ~]# groupadd apache -g
  2. You have new mail in /var/spool/mail/root
  3. [root@localhost ~]# useradd apache -u -g -s /sbin/nologin -d /dev/null
  4. useradd:警告:此主目录已经存在。
  5. 不从 skel 目录里向其中复制任何文件。
  6. [root@localhost ~]# mkdir /home/apache
  7. [root@localhost ~]# chown /home/apache
  8. You have new mail in /var/spool/mail/root
  9. [root@localhost ~]# smbpasswd -a apache
  10. New SMB password:
  11. Retype new SMB password:
  12. Mismatch - password unchanged.
  13. 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 用户对本目录没有操作权限

解决方案:

  1. [root@localhost ~]# setfacl -m d:u:apache:rwx -R /usr/local/apache2/htdocs

查看 facl 权限:

  1. [root@localhost ~]# getfacl /usr/local/apache2/htdocs/
  2. getfacl: Removing leading '/' from absolute path names
  3. # file: usr/local/apache2/htdocs/
  4. # owner: apache
  5. # group: apache
  6. user::rwx
  7. user:apache:rwx
  8. group::r-x
  9. mask::rwx
  10. other::rwx
  11. default:user::rwx
  12. default:user:apache:rwx
  13. default:group::r-x
  14. default:mask::rwx
  15. default:other::r-x

如果还不行,则参照:《Samba服务中,不能创建文件夹和文本文件_解决办法》:

  1. [root@localhost ~]# vi /etc/selinux/config

重启 Linux 服务器:

  1. reboot

⑥ (在 test 目录下)重新创建 redis 目录,在 redis 目录中创建文件 redis.php,打开该文件,编辑:

  1. <?php
  2. //实例化 Redis 对象
  3. $redis = new Redis();
  4. //连接到 Redis 服务器
  5. $a = $redis->connect('localhost', 6379); //连接地址; 端口号; 连接时长,默认为0,不受限制
  6. var_dump($a);

启动 apache:

  1. /usr/local/apache2/bin/apachectl start

访问:192.168.254.100/redis/redis.php,输出:

  1. bool(true)

表示连接 redis 服务已经成功。

此时登录客户端,输入 keys *:

  1. [root@localhost ~]# redis-cli -a phpdee
  2. 127.0.0.1:6379> keys *
  3. (empty list or set)

当前库中没有键;

同时可以在 redis.php 中使用 keys() 方法(要先授权,否则返回 bool(false) ):

  1. <?php
  2. //实例化 Redis 对象
  3. $redis = new Redis();
  4. //连接到 Redis 服务器
  5. $a = $redis->connect('localhost', 6379); //连接地址; 端口号; 连接时长,默认为0,不受限制
  6. //var_dump($a);
  7. $data = $redis->keys('*');
  8. var_dump($data);

访问:192.168.254.100/redis/redis.php,输出:

  1. array(0) { }

当前库中没有键。

此时在 redis.php 中使用 set() 方法创建一个键值对:

  1. <?php
  2. //实例化 Redis 对象
  3. $redis = new Redis();
  4. //连接到 Redis 服务器
  5. $a = $redis->connect('localhost', 6379); //连接地址; 端口号; 连接时长,默认为0,不受限制
  6. //var_dump($a);
  7. //授权
  8. $redis->auth('phpdee');
  9. //设置一个键值对
  10. $redis->set('name', 'dee');
  11. //获取 name 的值
  12. $name = $redis->get('name');
  13. var_dump($name);
  14. //获取库中所有的键
  15. $data = $redis->keys('*');
  16. var_dump($data);

访问:192.168.254.100/redis/redis.php,输出:

  1. string(3) "dee" array(1) { [0]=> string(4) "name" }

说明 set() 方法成功。

在 linux redis 客户端中再次查询库中的键:

  1. 127.0.0.1:6379> keys *
  2. 1) "name"
  3. 127.0.0.1:6379> get name
  4. "dee"

同样获取到了 key 为 name 的值。

【总结】操作步骤:实例化 redis 对象→连接 redis 服务器→授权→相关操作

相关操作:

使用 hash 类型存储用户信息

在 test 目录下新建 add.php(添加用户的界面,提交到 reg.php):

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>PHP+Redis信息管理系统</title>
  6. </head>
  7. <body>
  8. <form action="reg.php" method="post">
  9. <table align="left">
  10. <tr><td>用户名:</td><td><input type="text" name="username"></td></tr>
  11. <tr><td>密码:</td><td><input type="password" name="password" id=""></td></tr>
  12. <tr><td>年龄:</td><td><input type="text" name="age" id=""></td></tr>
  13. <tr><td><input type="submit" value="注册"></td><td><input type="reset" value="重填"></td></tr>
  14. </table>
  15. </form>
  16. </body>
  17. </html>

界面:

reg.php(添加用户的操作):

  1. <?php
  2. require 'redis.php';
  3.  
  4. $username = $_POST['username'];
  5. $password = md5($_POST['password']);
  6. $age =$_POST['age'];
  7. //uid 自加
  8. //当有 userid 这个键时,执行 incr时该键的值加1;不存在该键时,创建一个 userid,值为0,执行incr,值为1
  9. $uid = $redis->incr('userid');
  10.  
  11. //向 hash 表中批量添加数据:hMset
  12. $redis->hMset('user:'.$uid, array('uid'=>$uid, 'name'=>$username, 'password'=>$password, 'age'=>$age));
  13.  
  14. //跳转
  15. header('location:list.php');

redis.php(实例化 redis 对象并连接 redis 服务器,同时授权):

  1. <?php
  2. //实例化 Redis 对象
  3. $redis = new Redis();
  4. //连接到 Redis 服务器
  5. $redis->connect('localhost', 6379); //连接地址; 端口号; 连接时长,默认为0,不受限制
  6. //授权
  7. $redis->auth('phpdee');

list.php(显示所有用户列表的界面,提供删除、编辑操作):

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>用户信息列表</title>
  6. </head>
  7. <body>
  8. <a href="add.php">返回注册页面</a>
  9.  
  10. <?php
  11. require 'redis.php';
  12. for( $i = 1; $i <= $redis->get('userid'); $i++ ){
  13. $data[] = $redis->hgetall('user:'.$i);
  14. //过滤数组中的空元素
  15. $data = array_filter($data);
  16. }
  17. ?>
  18. <table border="1" cellspacing="0" cellpadding="5">
  19. <tr>
  20. <th>uid</th>
  21. <th>name</th>
  22. <th>age</th>
  23. <th>操作</th>
  24. </tr>
  25. <?php foreach($data as $v){ ?>
  26. <tr>
  27. <td><?php echo $v['uid']?></td>
  28. <td><?php echo $v['name']?></td>
  29. <td><?php echo $v['age']?></td>
  30. <td><a href="del.php?uid=<?php echo $v['uid'];?>">删除</a> | <a href="mod.php?uid=<?php echo $v['uid'];?>">编辑</a></td>
  31. </tr>
  32. <?php } ?>
  33. </table>
  34. </body>
  35. </html>

在 http://192.168.254.100/redis/add.php 中输入信息,注册(例如姓名:dee,密码:123,年龄:25);

注册完之后进入 redis 客户端:

  1. 127.0.0.1:6379> keys *
  2. 1) "userid"
  3. 2) "user:1"
  4.  
  5. 127.0.0.1:6379> get userid
  6. "1"
  7.  
  8. 127.0.0.1:6379> hgetall user:1
  9. 1) "uid"
  10. 2) "1"
  11. 3) "name"
  12. 4) "dee"
  13. 5) "password"
  14. 6) "202cb962ac59075b964b07152d234b70"
  15. 7) "age"
  16. 8) "25"

多次测试之后访问 http://192.168.254.100/redis/list.php:

del.php(删除用户信息的操作):

  1. <?php
  2. require 'redis.php';
  3.  
  4. $uid = $_GET['uid'];
  5. $redis->del('user:'.$uid);
  6. header('location:list.php');

mod.php(编辑用户信息的界面,和 add.php 相似):

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>编辑用户</title>
  6. </head>
  7. <body>
  8. <?php
  9. require 'redis.php';
  10.  
  11. $uid = $_GET['uid'];
  12. $data = $redis->hgetall('user:'.$uid);
  13. ?>
  14. <form action="doEdit.php" method="post">
  15. <table align="left">
  16. <tr><td>用户名:</td><td><input type="text" name="username" value="<?php echo $data['name'];?>"></td></tr>
  17. <tr><td>年龄:</td><td><input type="text" name="age" value="<?php echo $data['age'];?>"></td></tr>
  18. <tr><td><input type="submit" value="修改"></td><td><input type="hidden" name="uid" value="<?php echo $data['uid'];?>"></td></tr>
  19. </table>
  20. </form>
  21. </body>
  22. </html>

doEdit.php(编辑用户的操作):

  1. <?php
  2. require 'redis.php';
  3.  
  4. $uid = $_POST['uid'];
  5. $name = $_POST['username'];
  6. $age = $_POST['age'];
  7.  
  8. //执行批量更改
  9. $res = $redis->hmset('user:'.$uid, array('name'=>$name, 'age'=>$age));
  10. //跳转
  11. if($res){
  12. header('location:list.php');
  13. }

【附】查看 redis 服务是否启动:

  1. [root@localhost ~]# netstat -tunpl | grep
  2. tcp 0.0.0.0: 0.0.0.0:* LISTEN /redis-server *
  3. tcp ::: :::* LISTEN /redis-server *

Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查)的更多相关文章

  1. 【EF学习笔记09】----------使用 EntityState 枚举标记实体状态,实现增删改查

    讲解之前,先来看一下我们的数据库结构:班级表 学生表 如上图,实体状态由EntityState枚举定义:Detached(未跟踪).Unchanged(未改变).Added(已添加).Deleted( ...

  2. 【Redis笔记(四)】 Redis数据结构 - list链表

    原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50573605 经过前面的介绍,我们学习了Redis中string字符串.hash ...

  3. Redis入门之增删改查等常用命令总结

    Redis是用C语言实现的,一般来说C语言实现的程序"距离"操作系统更近,执行速度相对会更快. Redis使用了单线程架构,预防了多线程可能产生的竞争问题. 作者对于Redis源代 ...

  4. 第三课作业——set类型、sorted set类型的增删改查,redis的事务

    第三课时作业 静哥 by 2016.2.23~2016.3.6   [作业描述] 1.总结什么是set以及什么是sorted set,并完成对set以及sorted set的增删改查(查需要至少4种方 ...

  5. Redis的增删改查命令总结与持久化方式

    原文:Redis的增删改查命令总结与持久化方式 Redis是用C语言实现的,一般来说C语言实现的程序"距离"操作系统更近,执行速度相对会更快. Redis使用了单线程架构,预防了多 ...

  6. Redis的增删改查、持久化你会了吗

    原文:Redis的增删改查.持久化你会了吗 Redis是用C语言实现的,一般来说C语言实现的程序"距离"操作系统更近,执行速度相对会更快. Redis使用了单线程架构,预防了多线程 ...

  7. Redis简单的数据操作(增删改查)

    #Redis简单的数据操作(增删改查): 字符串类型 string 1. 存储: set key value 127.0.0.1:6379> set username zhangsan OK 2 ...

  8. python全栈开发中级班全程笔记(第二模块、第三章)(员工信息增删改查作业讲解)

    python全栈开发中级班全程笔记 第三章:员工信息增删改查作业代码 作业要求: 员工增删改查表用代码实现一个简单的员工信息增删改查表需求: 1.支持模糊查询,(1.find name ,age fo ...

  9. 使用控制台对Redis执行增删改查命令

    使用控制台对Redis执行增删改查命令 在上一篇里,我们已经安装了redis.这一篇我们将一起来学习如何使用"控制台"管理Redis 首先肯定是打开一个控制台,在windows系统 ...

  10. Java连接Redis之redis的增删改查

    一.新建一个maven工程,工程可以以jar的形式或war都行,然后导入正确的依赖 <project xmlns="http://maven.apache.org/POM/4.0.0& ...

随机推荐

  1. SQL 代码创建表格以及CRUD

    create table <表名>( <列名> <数据类型及长度> [not null], <列名> <数据类型及长度>, ... < ...

  2. C#学习笔记---修饰符,this关键字和static关键字

    1.  C#中类的修饰符: public 表示不限制对该类的访问  protected 表示只能从所在类和所在类派生的子类进行访问    private 只有其所在类才能访问 internal 只有对 ...

  3. Intent的七大属性

    1.Action Action属性代表系统要执行的动作 系统提供如下常用的Action属性 *ACTION_MAIN:应用程序入口点 *ACTION_VIEW:显示指定数据 *ACTION_EDIT: ...

  4. JavaScript案例六:简单省市联动(NBA版)

    JavaScript实现简单省市(NBA版)联动 <!DOCTYPE html> <html> <head> <title>JavaScript实现简单 ...

  5. JVM的GC理论详解

    GC的概念 GC:Garbage Collection 垃圾收集.这里所谓的垃圾指的是在系统运行过程当中所产生的一些无用的对象,这些对象占据着一定的内存空间,如果长期不被释放,可能导致OOM(堆溢出) ...

  6. 人见人爱A^B

    求A^B的最后三位数表示的整数.说明:A^B的含义是“A的B次方”   Input 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A= ...

  7. http://blog.csdn.net/shangboerds/article/details/44175667

    http://blog.csdn.net/shangboerds/article/details/44175667

  8. Open Xml SDK 引文

    什么是Open Xml SDK? 什么是Open Xml? 首先,我们得知道,Open Xml为何物? 我们还是给她起个名字——就叫 “开放Xml”,以方便我们中文的阅读习惯.之所以起开放这个名字,因 ...

  9. LightOJ1125 Divisible Group Sums(DP)

    题目问从N个数中取出M个数,有多少种取法使它们的和能被D整除. dp[i][j][k]表示,前i个数取出j个数模D的余数为k的方案数 我用“我为人人”的方式来转移,就从i到i+1转移,对于第i+1个数 ...

  10. VS 2010 WebSite网站 使用CodeBehide 方式开发[Web应用程序项目转Web网站]

    由于生成Web应用程序的文件非常大,100M左右,上传到香港太慢,对于运维工作很不现实, 所以只能改用单个源代码文件上传方式,也就是Web网站方式,但VS2010中只提供Web网站转Web应用程序功能 ...