1. PHP 连接 Redis
访问 redis 官方网站的 client 栏目:,可以获取 redis 的 php 扩展。
其中 phpredis 扩展比较稳定,功能也比较全,属于一个第三方扩展,但是已经被 PHP 官方授权,它的方法名和客户端下的方法名基本一致。github 地址:,方法在这里也能查得到。
① 下载 phpredis 的源代码包,解压、配置、编译、安装;
② 编辑 php.ini,给 PHP 打上 redis 模块(extension=redis.so);
③ 写一个 phpinfo 的页面,访问,找到 redis 扩展:
(这三步之前已经做过,参见:)
④ 配置 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 apacheNew 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就可以了(参见《》):
[root@localhost ~]# groupadd apache -g 6000 You have new mail in /var/spool/mail/root[root@localhost ~]# useradd apache -u 6000 -g 6000 -s /sbin/nologin -d /dev/null useradd:警告:此主目录已经存在。不从 skel 目录里向其中复制任何文件。[root@localhost ~]# mkdir /home/apache[root@localhost ~]# chown 777 /home/apacheYou 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 ~]# 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: apacheuser::rwxuser:apache:rwxgroup::r-xmask::rwxother::rwxdefault:user::rwxdefault:user:apache:rwxdefault:group::r-xdefault:mask::rwxdefault:other::r-x
如果还不行,则参照:《》:
[root@localhost ~]# vi /etc/selinux/config
重启 Linux 服务器:
reboot
⑥ (在 test 目录下)重新创建 redis 目录,在 redis 目录中创建文件 redis.php,打开该文件,编辑:
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 phpdee127.0.0.1:6379> keys *(empty list or set)
当前库中没有键;
同时可以在 redis.php 中使用 keys() 方法(要先授权,否则返回 bool(false) ):
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() 方法创建一个键值对:
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):
PHP+Redis信息管理系统
界面:
reg.php(添加用户的操作):
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 服务器,同时授权):
connect('localhost', 6379); //连接地址; 端口号; 连接时长,默认为0,不受限制//授权$redis->auth('phpdee');
list.php(显示所有用户列表的界面,提供删除、编辑操作):
用户信息列表 返回注册页面 get('userid'); $i++ ){ $data[] = $redis->hgetall('user:'.$i); //过滤数组中的空元素 $data = array_filter($data);}?>
uid | name | age | 操作 |
---|---|---|---|
删除 | 编辑 |
在 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:11) "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(删除用户信息的操作):
del('user:'.$uid);header('location:list.php');
mod.php(编辑用户信息的界面,和 add.php 相似):
编辑用户 hgetall('user:'.$uid); ?>
doEdit.php(编辑用户的操作):
hmset('user:'.$uid, array('name'=>$name, 'age'=>$age));//跳转if($res){ header('location:list.php');}