【php-redis擴展編譯】
◆ redis擴展安裝
到pecl.php.net 搜索redis,下載stable版(穩定版)擴展。
解壓 tar zxvf redis-2.2.4.tgz ,進入解壓後的目錄,
執行 /usr/local/php/bin/phpize (作用是檢測PHP的內核版本,併爲擴展生成相應的編譯配置)
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
引入編譯出的redis.so插件:
編輯vim /usr/local/php/php.ini 在最後面添加 extension=redis.so
在phpinfo()中可以看到redis的擴展了:
◆ redis插件的使用
<?php
//實例化Redis對象
$redis = new Redis();
//連接到redis服務器
$flag = $redis->open('localhost',6379);
//print_r($flag);
//set方法存入數據
$redis->set('user:userid:2:username','renxing');
$value = $redis->get('user:userid:2:username');
print_r($value); //輸入“renxing”
【使用PHP操作Redis數據庫進行增刪改查操作】
使用hash類型存儲數據。
hmset:批量添加數據
hgetall:獲取所有數據
del:刪除數據
【主要代碼】
【連接到服務器】
//實例化
$redis = new Redis();
//連接到服務器
$redis->connect("localhost");
//授權
//$redis->auth("renxing");
【執行添加操作】
//設定一個自增的數值,類似於主鍵
$uid = $redis->incr("userid");
//使用hmset批量添加元素
$add_data = array(
"uid"=>$uid,
"username"=>$username,
"password"=>$password,
"age"=>$age
);
$res = $redis->hmset("user:".$uid,$add_data);
【獲取數據】
require_once "conn.php";
//獲取當前自增的數值
$incr_id = $redis->get("userid");
//使用hgetall獲取數據
for($i=1;$i<=$incr_id;$i++){
$data[] = $redis->hgetall("user:".$i);
}
print_r($data);
【修改操作】—— 類似 添加操作
【刪除操作】
$res = $redis->del("user:".$uid);
【分頁操作】
1.在註冊的時候,將所有的uid存在鏈表結構list中,
使用rpush uid 1 存儲,使用lrange uid 0 -1 獲取全部數據。
在刪除數據的時候,使用lrem刪除對應的id號。
PHP中用lsize可以獲取list的總數。
2.假設每頁顯示3條,那麼:
第1頁: lrange uid 0 2
第2頁: lrange uid 3 5
第3頁: lrange uid 6 8
...
3.分頁實現代碼:
/*分頁相關*/
//用戶總數
$count = $redis->lsize("uid");
//每頁顯示多少條數據
$page_size = 3;
//當前第幾頁
$page_num = $_GET['page']?$_GET['page']:1;
//總頁數
$page_count = ceil($count/$page_size);
//上一頁
$page_up = ($page_num-1)<=1?1:($page_num-1);
//下一頁
$page_down = ($page_num+1)>=$page_count?$page_count:($page_num+1);
//分析:2.假設每頁顯示3條,那麼 —— 第1頁: lrange uid 0 2 ; 第2頁: lrange uid 3 5
$a = ($page_num-1)*$page_size;
$b = $a+$page_size-1;
$ids = $redis->lrange("uid",$a,$b);
//print_r($ids);
/*分頁取數據*/
foreach($ids as $v){
$data[] = $redis->hgetall("user:".$v);
}
【登錄操作】
1.在註冊操作的時候要存儲一個 username和uid的對應關係
$redis->set("username:".$username,$uid);
那麼登錄的時候,使用get 就可以知道這個username是否存在
$id = $redis->get("username:".$username);
然後通過這個$id 用hget得到存儲在數據庫中的password,和用戶輸入的密碼進行判斷
$pwd = $redis->hget("user:".$id,"password");
如果正確了,設置SESSION或者cookie。
【加關注】
1.用集合存儲比較合適,sadd存儲數據,smembers獲取數據,sdiff獲取兩個用戶關注的差集。
$id = $_GET['id']; //關注誰?的uid
$uid = $_SESSION['uid']; //我的uid
//$uid 關注了哪些人
$redis->sadd("user:".$uid.":guanzhu",$id);
//$id 的粉絲
$redis->sadd("user:".$id.":fensi",$uid);
得到差集,就可以推薦用戶了。
2.在PHP中顯示我關注了誰。
$my_guanzhu = $redis->smembers("user:".$_SESSION['uid'].":guanzhu");
foreach($my_guanzhu as $gz){
$row = $redis->hgetall("user:".$gz);
echo $row['uid'].'----'.$row['username'].'----'.$row['age'].'<br>';
}
3.在PHP中顯示我的粉絲
$my_fensi = $redis->smembers("user:".$_SESSION['uid'].":fensi");
foreach($my_fensi as $fs){
$row2 = $redis->hgetall("user:".$fs);
echo $row2['uid'].'----'.$row2['username'].'----'.$row2['age'].'<br>';
}