redis筆記12-PHP操作Redis

【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>';
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章