1. PHP 鏈接 Redisphp
訪問 redis 官方網站的 client 欄目:http://www.redis.io/clients#php,能夠獲取 redis 的 php 擴展。html
其中 phpredis 擴展比較穩定,功能也比較全,屬於一個第三方擴展,可是已經被 PHP 官方受權,它的方法名和客戶端下的方法名基本一致。github 地址:https://github.com/phpredis/phpredis,方法在這裏也能查獲得。linux
① 下載 phpredis 的源代碼包,解壓、配置、編譯、安裝;git
② 編輯 php.ini,給 PHP 打上 redis 模塊(extension=redis.so);github
③ 寫一個 phpinfo 的頁面,訪問,找到 redis 擴展:web
(這三步以前已經作過,參見:http://www.cnblogs.com/dee0912/p/4343032.html)redis
④ 配置 Samba 服務器apache
(在一些中小型網絡,或者企業的內部網中,利用Linux創建文件服務器是一個很好的解決方案。針對企業內部網中的絕大部分客戶機採用Windows的狀況,咱們能夠經過使用 Samba 來實現文件服務器功能。 )windows
打開光盤源:數組
勾選「已鏈接」,選擇 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 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/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'); }