常用php操作redis命令整理

常用php操作redis命令整理

Redis連接

在使用Redis的開始的時候,在phpinfo()中查看redis的類庫是否已經加載,()確保加載後使用。

[root@iZ2ze3941xpzjp7tqodvj7Z ~]# redis-cli 
127.0.0.1:6379> auth test123
OK
127.0.0.1:6379> 
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
## 密碼命令
$redis->auth('test123');
## 檢測是否連接成功,成功輸出1
$redis->ping();

String

GET/SET

將字符串值value關聯到key。如果key已經持有其他值,SET就覆寫舊值,無視類型,總是返回OK(TRUE),因爲SET不可能失敗。

127.0.0.1:6379> set name "stark" EX 2000
OK
127.0.0.1:6379> get name
"stark"
127.0.0.1:6379> TTL name
(integer) 1907
	<?php
	//判斷指定的key是否存在
	$redis->exists('name');//int(0)
	$redis->set('name','stark');
	#expire設置過期時間,單位是秒
	$redis->expire('name',2000);       
	echo $redis->get('name');  
	//(integer) 1907 ,不斷輸出,會不斷縮減過期時間
	echo $redis->ttl('name');  
	
	#新版本加分佈式鎖
	#NX意思爲SET IF NOT EXIST,即當key不存在時,我們進行set操作;
	#若key已經存在,則不做任何操作;
	#PX意思是給這個key加一個過期設置
	$redis->set($resource, $token, ['NX', 'PX' => 10 ]);

SETNX

將key的值設爲value,當且僅當key不存在。若給定的key已經存在,則SETNX不做任何動作。設置成功,返回1。設置失敗,返回0。

redis> EXISTS job                # job 不存在
(integer) 0

redis> SETNX job "programmer"    # job 設置成功
(integer) 1

redis> SETNX job "code-farmer"   # 嘗試覆蓋 job ,失敗
(integer) 0

redis> GET job                   # 沒有被覆蓋
"programmer"
<?php

$redis->exists('key');  // key不存在 //bool(false);
$redis->setnx('key', "val");  // key設置成功 //bool(true)
$redis->setnx('key', "val1");  // key設置失敗 //bool(false)
echo $redis->get('key');  // 沒有被覆蓋 //"val"

SETEX

將值value關聯到key,並將key的生存時間設爲seconds(以秒爲單位)。如果key已經存在,SETEX命令將覆寫舊值。設置成功時返回OK.

redis> SETEX cache_user_id 60 10086
OK
redis> GET cache_user_id  # 值
"10086"
redis> TTL cache_user_id  # 剩餘生存時間
(integer) 49


# key 已經存在時,SETEX 覆蓋舊值
redis> SET cd "timeless"
OK
redis> SETEX cd 3000 "goodbye my love"
OK
redis> GET cd
"goodbye my love"
redis> TTL cd
(integer) 2997
$redis->setex('key', 10, 'val'); //表示存儲有效期爲10秒
舉例:
//①key不存在
$redis->setex('key', 60,val);//bool(true)
echo $redis->get('key');  //值 //"val"
sleep(4);
echo $redis->ttl('key');  //剩餘生存時間 //int(56)

//②key已經存在,key被覆寫
$redis->set('key', "val1"); //bool(true);
$redis->setex('key', 3000,"val2"); //bool(true);
echo $redis->get('key');    //"val2"

MGET/MSET

同時設置一個或多個key-value對。當發現同名的key存在時,MSET會用新值覆蓋舊值,如果你不希望覆蓋同名key,請使用MSETNX命令。總是返回OK(因爲MSET不可能失敗)

redis> MSET date "2012.3.30" time "11:00 a.m." weather "sunny"
OK

redis> MGET date time weather
1) "2012.3.30"
2) "11:00 a.m."
3) "sunny"
<?php
$array_mset=['key1'=>'val1', 'key2'=>'val2'];
$redis->MSET($array_mset); //bool(true)

返回所有(一個或多個)給定key的值。如果某個指定key不存在,那麼返回特殊值nil。因此,該命令永不失敗。一個包含所有給定key的值的列表。

<?php
$redis_mget_key_array=array('exists_key','not_exists_key');
var_dump($redis->MGET($redis_mget_key_array));  
//當MGET中有不存在key的情況   
//array(2) { [0]=> string(3) "val" [1]=> bool(false) }

INCR / INCRBY

redis> SET page_view 20
OK
redis> INCR page_view
# key 存在且是數字值
redis> SET rank 50
OK
redis> INCRBY rank 20
(integer) 70
redis> GET rank
"70"
# key 不存在時
redis> EXISTS counter
(integer) 0
redis> INCRBY counter 30
(integer) 30
redis> GET counter
"30"
<?php
$redis->SET('page_view', 20);
var_dump($redis->INCR('page_view')); //int(21) 
var_dump($redis->GET('page_view'));   
// 數字值在Redis中以字符串的形式保存 
//string(2) "21

//①key存在且是數字值
$redis->SET('num', 50);  //設置num爲50
$redis->INCRBY('num', 20);  //給num加上20
var_dump($redis->GET('num')); //string(2) "70"

//②key不存在
$redis->INCRBY('not_exists_key',20);  //20
var_dump($redis->GET('not_exists_key')); //string(20)

//③key不是數字值
$redis->SET('book', "long long ago...");
var_dump($redis->INCRBY('book', 200)); // bool(false)

DECR和DECRBY原理是一樣的,這裏就不贅述了。

哈希類型

HSET

將哈希表key中的域field的值設爲value;如果field是哈希表中的一個新建域,並且值設置成功,返回1;如果哈希表中域field已經存在且舊值已被新值覆蓋,返回0。

$redis->hset('hash1','key1','val1');
var_dump($redis->hset('hash1','key1','val1_new')); //將key爲'key1' value爲'val1_new'覆蓋。返回0
var_dump($redis->hset('hash1','key2','val2'));     //返回1

HGET

返回哈希表key中給定域field的值。當給定域不存在或是給定key不存在時,返回nil。

<?php
$res = $redis->hget('hash1','key1');           
//取出表'hash1'中的key 'key1'的值,返回'val1_new'
var_dump($redis->hget('hash1','key3'));     
//不存在返回false

HMGET

返回哈希表key中,一個或多個給定域的值。
如果給定的域不存在於哈希表,那麼返回一個nil值。
因爲不存在的key被當作一個空哈希表來處理,所以對一個不存在的key進行HMGET操作將返回一個只帶有nil值的表。

$redis->hset('hash1','key1','val1');
$arr = ['key1', 'key6'];
var_dump($redis->hmget('hash1',$arr)); //array(2) { ["key1"]=> string(4) "val1" ["key6"]=> bool(false) }

HGETALL

返回哈希表key中,所有的域和值。
在返回值裏,緊跟每個域名(field name)之後是域的值(value),所以返回值的長度是哈希表大小的兩倍。
以列表形式返回哈希表的域和域的值。 若key不存在,返回空列表。

<?php
$redis->hset('hash1','key1','val1');
$redis->hset('hash1','key2','val2');
var_dump($redis->hGetAll('hash1')); //array(2) { ["key1"]=> string(4) "val1" ["key2"]=> string(4) "val2" }

HDEL

var_dump($redis->hdel('hash1','key2')); //int(1) 刪除成功返回1

HLEN

var_dump($redis->hlen('hash1')); //int(1)

HEXISTS

查看哈希表key中,給定域field是否存在。
如果哈希表含有給定域,返回1;不含有給定域,或key不存在,返回0。

var_dump($redis->HEXISTS('hash1','key1')); //bool(true) 
var_dump($redis->HEXISTS('hash1','key6')); // bool(false)

HINCRBY

爲哈希表key中的域field的值加上增量increment,也可以爲負數,相當於對給定域進行減法操作。
如果key不存在,一個新的哈希表被創建並執行HINCRBY命令。
如果域field不存在,那麼在執行命令前,域的值被初始化爲0。

<?php
$redis->hset('hash1','key1','val1');
$redis->hset('hash1','key2','val2'); 
$redis->hincrby('hash1','key3',3);
$redis->hincrby('hash1','key4',-3);
var_dump($redis->hgetall('hash1')); //array(4) { ["key1"]=> string(4) "val1" ["key2"]=> string(4) "val2" ["key3"]=> string(1) "3" ["key4"]=> string(2) "-3" }

HKEYS

返回哈希表key中的所有域。當key不存在時,返回一個空表。

<?php
var_dump($redis->hkeys('hash1')); //array(4) { [0]=> string(4) "key1" [1]=> string(4) "key2" [2]=> string(4) "key3" [3]=> string(4) "key4" }
var_dump($redis->hkeys('hash6')); //array(0) { }

HVALS

返回哈希表key中的所有值。當key不存在時,返回一個空表。

<?php
var_dump($redis->hvals('hash1'));
 //array(4) { [0]=> string(4) "val1" [1]=> string(4) "val2" [2]=> string(1) "3" [3]=> string(2) "-3" }
var_dump($redis->hvals('hash5'));  // array(0) { }

List 類型

頭元素和尾元素:頭元素指的是列表左端/前端第一個元素,尾元素指的是列表右端/後端第一個元素。舉個例子,列表list包含三個元素:x, y, z,其中x是頭元素,而z則是尾元素。
空列表:指不包含任何元素的列表,Redis將不存在的key也視爲空列表。

Redis裏的list類型,常用處理異步處理,聯合使用crontab的計劃任務合作執行,採用結構式ziplist的緊湊形式,入隊和出隊同時用左側或者是右側。

LPUSH / LPOP

將一個或多個值value插入到列表key的表頭。如果key不存在,一個空列表會被創建並執行LPUSH操作。

之前使用Redis隊列處理的腳本找不到了,這個回頭在整理???

集合

SADD

將一個或多個member元素加入到集合key當中。(從左側插入,最後插入的元素在0位置),集合中已經存在TK 則返回false,不存在添加成功 返回true

var_dump($redis->sadd('set-key','A','B','C')); //int(3)

SMEMBERS

<?php
var_dump($redis->sMembers('set-key')); //array(3) { [0]=> string(1) "C" [1]=> string(1) "A" [2]=> string(1) "B" }

SREM

<?php
$redis->srem('set-key','C'); //移除set-key中的C元素

SCARD

返回集合key的基數(集合中元素的數量)。

var_dump($redis->scard('set-key'));  //int(3)

SPOP

隨機返回容器中一個元素,並移除該元素

$redis->sadd('s-key','A','B','C','D','E');
var_dump($redis->spop('s-key'));  //string(1) "E"
var_dump($redis->spop('s-key2'));  //該key不存在 ,返回bool(false)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章