本文為我閱讀了 redis參考手冊 之后結合 博友的博客 編寫,注意 php_redis 和 redis-cli 的區別(主要是返回值類型和參數用法)
目錄:
string(字符串) | ||||||
SET | SETNX | SETEX | SETRANGE | MSET | MSETNX | APPEND |
GET | MGET | GETRANGE | GETSET | STRLEN | INCR | INCRBY |
INCRBYFLOAT | DECR | DECRBY | SETBIT | GETBIT |
Redis SET 命令用於設置給定 key 的值。如果 key 已經存儲其他值, SET 就覆寫舊值,且無視類型。
語法:
redis 127.0.0.1:6379> SET KEY_NAME VALUE
返回值: 設置成功時返回 OK 。當seconds參數不合法時,返回一個錯誤。
可用版本:>= 2.0.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: 最字符串類型的 key 進行 set
$redis -> set('favorite_fruit','apple'); var_dump($redis -> get('favorite_fruit')); // string apple // This second case: 最非字符串類型的 key 進行 set
$redis -> lPush('pats','dog'); $redis -> type('pats'); // list
$redis -> set('pats','cat'); // 不管類型為什么,都可以完成覆蓋
var_dump($redis -> get('pats')); // string cat
Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在時,為 key 設置指定的值。
語法:
redis 127.0.0.1:6379> SETNX KEY_NAME VALUE
返回值: 設置成功,返回 1 。 設置失敗,返回 0 。
可用版本: >= 1.0.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); $redis -> setnx('job','programmer'); $redis -> setnx('job','code-farmer'); var_dump($redis -> get('job')); // string programmer ,沒有被覆蓋
Redis Setex 命令為指定的 key 設置值及其過期時間。如果 key 已經存在, SETEX 命令將會替換舊的值。
語法:
redis 127.0.0.1:6379> SETEX KEY_NAME TIMEOUT VALUE
該命令類似於一下 2 個命令:
$redis -> set('key','value'); // 設置值 $redis -> expire('key','seconds'); // 設置生存時間
不同之處在於,SETEX 是一個原子性操作,設置值和生存時間同時完成,該命令在redis用做緩存是非常有用。
返回值: 設置成功時返回OK。當seconds參數不合法時,返回一個錯誤。。
可用版本: >= 2.0.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: key 不存在
$redis -> setex('mykey',20,'redis'); echo $redis -> get('mykey'); // redis
sleep(2); var_dump($redis -> ttl('mykey')); // 18 // This second case: key 已存在,覆蓋
$redis -> set('job','programmer'); $redis -> setex('job',10,'code-farmer'); echo $redis -> get('job'); // code
sleep(2); var_dump($redis -> ttl('job')); // 8
Redis Setrange 命令用指定的字符串覆蓋給定 key 所儲存的字符串值,覆蓋的位置從偏移量 offset 開始。
語法:
redis 127.0.0.1:6379> SETRANGE KEY_NAME OFFSET VALUE
返回值: 被修改后的字符串長度。
可用版本: >= 2.2.0
時間復雜度:對小(small)的字符串,平攤復雜度O(1)。(關於什么字符串是”小”的,請參考APPEND命令)否則為O(M),M為value參數的長度。
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: 對非空字符串進行 SETRANGE
$redis -> set('key1','Hello world'); $redis -> setRange('key1',6,'redis'); var_dump($redis -> get('key1')); // Hello redis // This second case: 對空字符串進行 SETRANGE
if(! $redis -> exists('fake_key')) { $redis -> setRange('fake_key',5,'redis'); var_dump($redis -> get('fake_key')); // string '�����redis' (length=10) ,空白處被 � 填充了。
}
Redis Mset 命令用於同時設置一個或多個 key-value 對。
(1)當發現同名的key存在時,MSET會用新值覆蓋舊值,如果你不希望覆蓋同名key,請使用MSETNX命令。
(2)MSET是一個原子性(atomic)操作,所有給定key都在同一時間內被設置,某些給定key被更新而另一些給定key沒有改變的情況,不可能發生。
語法:
redis 127.0.0.1:6379> MSET key1 value1 key2 value2 .. keyN valueN
返回值: 總是返回OK(因為MSET不可能失敗)
可用版本: >= 1.0.1
時間復雜度:O(N),N 為要設置的 key 數量。
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: 沒有舊值存在,同時設置多個值
$array_mset = array( 'year' => 2017,
'month' => 5,
'date' => 10,
'time' => '11:04' ); $redis -> mset($array_mset); var_dump($redis -> keys('*')); // array (size=4) // 0 => string 'time' (length=4) // 1 => string 'date' (length=4) // 2 => string 'month' (length=5) // 3 => string 'year' (length=4) // This second case: 有舊值存在,完成覆蓋。
$redis -> set('favorite_fruit','apple'); $array_mset = array('favorite_fruit'=>'banana'); $redis -> mset($array_mset); var_dump($redis -> get('favorite_fruit')); // banana
Redis Msetnx 命令用於所有給定 key 都不存在時,同時設置一個或多個 key-value 對。
(1)即使只有一個key已存在,MSETNX也會拒絕所有傳入key的設置操作
(2)MSETNX是原子性的,所有字段要么全被設置,要么全不被設置。
語法:
redis 127.0.0.1:6379> MSETNX key1 value1 key2 value2 .. keyN valueN
返回值: 當所有 key 都成功設置,返回 1 。 如果所有給定 key 都設置失敗(至少有一個 key 已經存在),那么返回 0
可用版本: >= 1.0.1
時間復雜度:O(N),N 為要設置的key的數量。
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: 沒有舊值存在,同時設置多個值
$array_mset = array( 'year' => 2017,
'month' => 5,
'date' => 10,
'time' => '14:59' ); $redis -> msetnx($array_mset); var_dump($redis -> keys('*')); // array (size=4) // 0 => string 'time' (length=4) // 1 => string 'date' (length=4) // 2 => string 'month' (length=5) // 3 => string 'year' (length=4) // This second case: 有舊值存在,無法完成覆蓋。
$redis -> set('favorite_fruit','apple'); $array_mset = array('favorite_fruit'=>'banana'); var_dump($redis -> msetnx($array_mset)); // boolean false
var_dump($redis -> get('favorite_fruit')); // apple , favorite_fruit的值並沒有發生改變
Redis Append 命令用於為指定的 key 追加值。
(1)如果 key 已經存在並且是一個字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。
(2)如果 key 不存在, APPEND 就簡單地將給定 key 設為 value ,就像執行 SET key value 一樣。
語法:
redis 127.0.0.1:6379> APPEND KEY_NAME NEW_VALUE
返回值: 追加指定值之后, key 中字符串的長度。
可用版本: >= 2.0.0
時間復雜度:平攤復雜度O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: 對已存在的字符串 append ,追加到字符串末尾
$redis -> set('favorite_fruit','cherry '); $redis -> append('favorite_fruit','is very delicious'); var_dump($redis -> get('favorite_fruit')); // string 'cherry is very delicious' // This second case: 對不存在的字符串 append , 相當於 set 的功能
$redis -> del('job'); // 確保一個不存在的 key
$redis -> append('job','PHPer'); var_dump($redis -> get('job')); // string 'PHPer'
Redis Get 命令用於獲取指定 key 的值。如果 key 不存在,返回 nil 。如果key 儲存的值不是字符串類型,返回一個錯誤。
語法:
redis 127.0.0.1:6379> GET KEY_NAME
返回值: 返回 key 的值,如果 key 不存在時,返回 nil。 如果 key 不是字符串類型,那么返回一個錯誤。
可用版本: >= 1.0.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: key 存在且是字符串類型
$redis -> set('favorite_fruit','cherry'); var_dump($redis -> get('favorite_fruit')); // string 'cherry' // This second case: key 不存在
$redis -> del('fake_key'); // 確保一個不存在的 key
var_dump($redis -> get('fake_key')); // boolean false // This third case: key 不在但不是字符串類型
$redis -> lPush('job','programmer'); // list 類型
var_dump($redis -> get('job')); // boolean false
Redis Mget 命令返回所有(一個或多個)給定 key 的值。 如果給定的 key 里面,有某個 key 不存在,那么這個 key 返回特殊值 nil 。
語法:
redis 127.0.0.1:6379> MGET KEY1 KEY2 .. KEYN
返回值:一個包含所有給定 key 的值的列表。
可用版本: >= 1.0.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: 給定的 key 都存在
$array_mset = array( 'year' => 2017,
'month' => 5,
'day' => 10,
'time' => '15:31' ); $redis -> mset($array_mset); $array_mget = array('year','month','day','time'); var_dump($redis -> mget($array_mget)); // array (size=4) // 0 => string '2017' (length=4) // 1 => string '5' (length=1) // 2 => string '10' (length=2) // 3 => string '15:31' (length=5) // This second case:給定的 key 中有 key 不存在的情況
$array_mget = array('year','month','fake_key'); var_dump($redis -> mget($array_mget)); // array (size=3) // 0 => string '2017' (length=4) // 1 => string '5' (length=1) // 2 => boolean false
Redis Mget 命令返回所有(一個或多個)給定 key 的值。 如果給定的 key 里面,有某個 key 不存在,那么這個 key 返回特殊值 nil
語法:
redis 127.0.0.1:6379> GETRANGE KEY_NAME start end
返回值:截取得到的子字符串。
可用版本: >= 2.4.0(在<=2.0的版本里,GETRANGE被叫作SUBSTR。)
時間復雜度:O(N),N為要返回的字符串的長度。(復雜度最終由返回值長度決定,但因為從已有字符串中建立子字符串的操作非常廉價(cheap),所以對於長度不大的字符串,該操作的復雜度也可看作O(1))。
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); $redis -> set('mykey','hello world'); echo $redis -> getRange('mykey',0,-1) . '</br>'; // 從開頭到結束, hello world
echo $redis -> getRange('mykey',0,4) . '</br>'; // 從 0 到 4 , hello
echo $redis -> getRange('mykey',-5,-1) . '</br>'; // 從 -5 到 -1 , world
var_dump($redis -> getRange('mykey',-1,-5)). '</br> '; // 從 -1 到 -5 , "" ,不支持回繞操作
echo $redis -> getRange('mykey',0,100). '</br> '; // 從 0 到 100 , hello world ,若范圍超過了字符串的長度,超過部分自動被忽略
Redis Getset 命令用於設置指定 key 的值,並返回 key 舊的值。
語法:
redis 127.0.0.1:6379> GETSET KEY_NAME VALUE
返回值:返回給定 key 的舊值。
(1)當 key 沒有舊值時,即 key 不存在時,返回 nil 。
(3)當 key 存在但不是字符串類型時,返回一個錯誤。
可用版本: >= 1.0.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: key 值存在且為字符串類型
$redis -> set('favorite_fruit','cherry'); var_dump($redis -> getSet('favorite_fruit','pineapple')); // cherry // This second case: key 值存在但不為字符串類型
$redis -> lPush('job','programmer'); var_dump($redis -> getSet('job','code-farmer')); // boolean false // This third case: key 值不存在
$redis -> del('fake_key'); var_dump($redis -> getSet('fake_key','not-exists')); // boolean false
Redis Strlen 命令用於獲取指定 key 所儲存的字符串值的長度。當 key 儲存的不是字符串值時,返回一個錯誤。
語法:
redis 127.0.0.1:6379> STRLEN KEY_NAME
返回值:字符串值的長度。 當 key 不存在時,返回 0。
可用版本: >= 2.2.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: key 值存在
$redis -> set('favorite_fruit','cherry'); var_dump($redis -> strlen('favorite_fruit')); // int 6 // This second case: key 值不存在
$redis -> del('fake_key'); var_dump($redis -> strlen('fake_key')); // int 0
Redis Incr 命令將 key 中儲存的數字值增一。
(1)如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCR 操作。
(2)如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。
(3)本操作的值限制在 64 位(bit)有符號數字表示之內。
語法:
redis 127.0.0.1:6379> INCR KEY_NAME
返回值:執行 INCR 命令之后 key 的值。
可用版本:>= 1.0.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: key 值存在且為數字
$redis -> set('number',10); var_dump($redis -> incr('number')); // int 11
var_dump($redis -> get('number')); // string '11' , 其值在 redis 中是以字符串的形式保存的 // This second case: key 值不存在
$redis -> del('fake_key'); var_dump($redis -> incr('fake_key')); // int 1 // This third case: key 值存但不為數字
$redis -> set('favorite_fruit','cherry'); var_dump($redis -> incr('favorite_fruit')); // boolean false // This fourth case: key 值存但為其它的類型
$redis -> lPush('job',20); var_dump($redis -> incr('job')); // boolean false
Redis Incrby 命令將 key 中儲存的數字加上指定的增量值。
(1)如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCRBY 命令。
(2)如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。
(3)本操作的值限制在 64 位(bit)有符號數字表示之內。
語法:
redis 127.0.0.1:6379> INCRBY KEY_NAME INCR_AMOUNT
返回值:加上指定的增量值之后, key 的值。
可用版本:>= 1.0.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: key 值存在且為數字
$redis -> set('number',10); var_dump($redis -> incrBy('number',5)); // int 15
var_dump($redis -> get('number')); // string '15' , 其值在 redis 中是以字符串的形式保存的 // This second case: key 值不存在
$redis -> del('fake_key'); var_dump($redis -> incrBy('fake_key','5')); // int 5 // This third case: key 值存但不為數字
$redis -> set('favorite_fruit','cherry'); var_dump($redis -> incrBy('favorite_fruit',5)); // boolean false // This fourth case: key 值存但為其它的類型
$redis -> lPush('job',20); var_dump($redis -> incrBy('job',5)); // boolean false
Redis Incrbyfloat 命令為 key 中所儲存的值加上指定的浮點數增量值。
語法:
redis 127.0.0.1:6379> INCRBYFLOAT KEY_NAME INCR_AMOUNT
返回值:執行命令之后 key 的值。
可用版本:>= 2.6.0
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: key 值存在且為數字
$redis -> set('number',10.2); var_dump($redis -> incrByFloat('number',0.3)); // float 10.5
var_dump($redis -> get('number')); // string '10.5' , 其值在 redis 中是以字符串的形式保存的 // This second case: key 值不存在
$redis -> del('fake_key'); var_dump($redis -> incrByFloat('fake_key',0.3)); // float 0.3 // This third case: key 值存但不為數字
$redis -> set('favorite_fruit','cherry'); var_dump($redis -> incrByFloat('favorite_fruit',0.3)); // boolean false // This fourth case: key 值存但為其它的類型
$redis -> lPush('job',20.2); var_dump($redis -> decrBy('job',0.3)); // boolean false
Redis Decr 命令將 key 中儲存的數字值減一。
(1)如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 DECR 操作。
(2)如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。
(3)本操作的值限制在 64 位(bit)有符號數字表示之內。
語法:
redis 127.0.0.1:6379> DECR KEY_NAME
返回值:執行命令之后 key 的值。。
可用版本:>= 1.0.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: key 值存在且為數字
$redis -> set('number',10); var_dump($redis -> decr('number')); // int 9
var_dump($redis -> get('number')); // string '9' , 其值在 redis 中是以字符串的形式保存的 // This second case: key 值不存在
$redis -> del('fake_key'); var_dump($redis -> decr('fake_key')); // int -1 // This third case: key 值存但不為數字
$redis -> set('favorite_fruit','cherry'); var_dump($redis -> decr('favorite_fruit')); // boolean false // This fourth case: key 值存但為其它的類型
$redis -> lPush('job',20); var_dump($redis -> decr('job')); // boolean false
Redis Decrby 命令將 key 所儲存的值減去指定的減量值。
(1)如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 DECRBY 操作。
(2)如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。
(3)本操作的值限制在 64 位(bit)有符號數字表示之內。
語法:
redis 127.0.0.1:6379> DECRBY KEY_NAME DECREMENT_AMOUNT
返回值:減去指定減量值之后, key 的值。
可用版本:>= 1.0.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); // This first case: key 值存在且為數字
$redis -> set('number',10); var_dump($redis -> decrBy('number',5)); // int 5
var_dump($redis -> get('number')); // string '5' , 其值在 redis 中是以字符串的形式保存的 // This second case: key 值不存在
$redis -> del('fake_key'); var_dump($redis -> decrBy('fake_key',5)); // int -5 // This third case: key 值存但不為數字
$redis -> set('favorite_fruit','cherry'); var_dump($redis -> decrBy('favorite_fruit',5)); // boolean false // This fourth case: key 值存但為其它的類型
$redis -> lPush('job',20); var_dump($redis -> decrBy('job',5)); // boolean false
Redis Setbit 命令用於對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。
(1)位的設置或清除取決於value參數,可以是0也可以是1。
(2)當key不存在時,自動生成一個新的字符串值。
(3)字符串會增長(grown)以確保它可以將value保存在指定的偏移量上。當字符串值增長時,空白位置以0填充。
(4)offset參數必須大於或等於0,小於2^32(bit映射被限制在512MB內)。
語法:
redis 127.0.0.1:6379> Setbit KEY_NAME OFFSET
返回值:指定偏移量原來儲存的位。
可用版本:>= 2.2.0
時間復雜度:O(1)
具體實例:
<?php $redis = new redis(); $redis -> connect('127.0.0.1',6379); $redis -> flushAll(); $bit = 67; echo decbin($bit); // 1000011 , 轉為二進制數
var_dump($redis ->setBit('bit_val',0,0)); // int 0 ,原來的空位都為 0
var_dump($redis ->setBit('bit_val',1,1)); // int 0
var_dump($redis ->setBit('bit_val',2,0)); // int 0
var_dump($redis ->setBit('bit_val',3,0)); // int 0
var_dump($redis ->setBit('bit_val',4,0)); // int 0
var_dump($redis ->setBit('bit_val',5,0)); // int 0
var_dump($redis ->setBit('bit_val',6,1)); // int 0
var_dump($redis ->setBit('bit_val',7,1)); // int 0
var_dump($redis -> get('bit_val')); // string 大寫字母 'C',其 ASCII 值為67 ,二進制為 0100 0011
var_dump($redis ->getBit('bit_val','6')); // int 1
var_dump($redis ->getBit('bit_val','8')); // int 0 , offset 比字符串的長度大,返回0
var_dump($redis ->getBit('bit_not_exist','1')); // int 0 , key 不存在,返回0
var_dump($redis ->setBit('bit_val',5,1)); // int 0 ,將原來的第 5 位改為 1
var_dump($redis ->setBit('bit_val',6,0)); // int 1 ,由於第 6 位被設置過為 1 ,現在返回原來位的值 1 ,但是第 6 位現在的值已經為 0 了
var_dump($redis -> get('bit_val')); // string 大寫字母 'E',其 ASCII 值為69 ,二進制為 0100 0101
Redis Getbit 命令用於對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)。
語法:
redis 127.0.0.1:6379> GETBIT KEY_NAME OFFSET
返回值:字符串值指定偏移量上的位(bit)。當偏移量 OFFSET 比字符串值的長度大,或者 key 不存在時,返回 0 。
可用版本:>= 2.2.0
時間復雜度:O(1)
具體實例:
參見 setbit
如有轉載,請注明出處:http://www.cnblogs.com/chrdai/p/6832373.html