Hash類型簡介
Hash是一個string類型的field和value的映射表,hash特別適合於對象存儲,每個hash可以存儲2^32 - 1個鍵值對(40多億)
原生命令介紹
命令 | 命令描述 | 實例 |
---|---|---|
HMSET key field1 value1 [field2 value2] | 同時將多個field-value(域-值)對設置到hash表key中 | HMSET hash1 name ‘zhuyl’ age ‘24’,HVALS hash1,返回值爲:“zhuyl”,“24” |
HMGET key field1 [field2] | 返回哈希表 key 中,一個或多個給定field的值,如果給定的field不存在於哈希表,那麼返回一個 nil 值 | HMGET hash1 name1 age1 desc1,返回值:“qing” (nil) “piao” |
HVALS key | 獲取hash表中所有值 | HVALS hash1,返回值:“zhuyl”,“24” |
HGET key field | 獲取存儲在哈希表key中指定的field的值 | HGET hash1 name,返回值:“zhuyl” |
HGETALL key | 獲取在哈希表中指定key的所有字段和值 | HGETALL hash1,返回值“name”“zhuyl” “age” “24” |
HEXISTS key field | 查看哈希表key中,指定的字段是否存在 | HEXISTS hash1 name,存在name字段則返回:1,HEXISTS hash1 desc,不存在desc字段則返回:0 |
HDEL key field1 [field2] | 刪除一個或多個哈希表字段 | HDEL hash1 name age,返回2(代表刪除字段的個數), |
HKEYS key | 獲取所有哈希表key中的字段 | HKEYS hash1,返回值:“name” “age” |
HLEN key | 獲取哈希表key中字段的數量 | HLEN hash1,返回值:2 |
HSET key field value | 將哈希表key中的字段field的值設爲value | HSET hash1 name ‘yu’,返回值:0,執行HVALS hash1,返回:“yu” “24” |
HSETNX key field value | 只有字段field不存在時,設置哈希表字段的值 | HSETNX hash1 desc ‘beuty’,返回值:1;執行HVALS hash1,返回值:‘yu’ ‘24’,‘beuty’,HSETNX hash1 desc ‘beuty111’,如果字段field已經存在,則返回:0 |
HINCRBY key field increment | 爲哈希表key中指定字段的整數值加上增量increment | HINCRBY hash1 age 3,返回增加之後的值:27 |
HINCRBYFLOAT key field increment | 爲哈希表key中的指定字段的浮點數值加上增量increment | HINCRBYFLOAT hash1 age 1.5,返回值爲+increment後的值:28.5 |
HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希表中的鍵值對,match用正則表達式過濾數據,count命令指定返回的數據的條數 | HSCAN hash1 0 MATCH ag* COUNT 10 |
HSTRLEN key field | 返回哈希表key中field字段的value值得長度,如果field或者value不存在,則返回:0,redis的版本>=3.2.0 | HSTRLEN hash1 name,返回值:2 |
特別介紹HSCAN命令
- MATCH:通過給定的正則表達式的pattern(模式)過濾數據,只返回和給定模式匹配的元素
- COUNT:COUNT的作用是告知迭代器每次迭代返回的元素的數量,大多數情況下都會返回比較準確的條數;
* COUNT的默認值是10;
* 數據集比較大時,如果沒有使用MATCH 選項, 那麼命令返回的元素數量通常和 COUNT 選項指定的一樣, 或者比 COUNT 選項指定的數量稍多一些;
* 在迭代一個編碼爲整數集合(intset,一個只由整數值構成的小集合)、 或者編碼爲壓縮列表(ziplist,由不同值構成的一個小哈希或者一個小有序集合)時, 增量式迭代命令通常會無視 COUNT 選項指定的值, 在第一次迭代就將數據集包含的所有元素都返回給用戶
php操作redis Hash的函數
- hSet(key,hashKey,value)函數
* 說明:將值爲value,鍵爲hashKey的元素添加到hash表key中
* 參數: key(哈希表的key),hashKey(哈希表中的元素的key),value(哈希表中key元素的值)
* 返回值:如果hashKey存在但value不存在且賦值成功返回1;如果hashKey存在但value存在且被替換成功則返回0;如果執行失敗則返回false
*php $redis->delete('hash1'); $ret = $redis->hSet('hash1', 'key1', 'hello'); /* 1 */ $r2 = $redis->hGet('hash1', 'key1'); /* returns "hello" */ $res = $redis->hSet('hash1', 'key1', 'plop'); /* 0, value was replaced. */ $r1 = $redis->hGet('hash1', 'key1'); /* returns "plop" */
- hSetNx(key,hashKey,value)函數
* 說明:將值爲value,鍵爲hashKey的元素添加到hash表key中,如果hashKey不存在
* 參數:key(哈希表的key),hashKey(哈希表中元素的key),value(哈希表中key元素的值)
* 返回值:如果hashKey設置成功返回true,如果hashKey已經存在則返回false
*php $redis->delete('hash1'); $ret = $redis->hSet('hash1', 'key1', 'hello'); var_dump($ret); /* 1 */ $res = $redis->hSet('hash1', 'key1', 'plop'); var_dump($res); /* 0 */
- hGet(key,hashKey)函數
* 說明:從哈希表key中取出鍵爲hashKey的值
* 參數: key(哈希表的key),hashKey(哈希表中元素的key)
* 返回值:如果成功則返回hashKey的值,失敗返回false
*php $r22 = $redis->hGet('hash1', 'key1'); var_dump($r22);/* "plop" */
- hLen(key)函數
* 說明:取得哈希表的長度(即有多少個hashKey),不管hashKey是否有值
* 參數:key(哈希表的key)
* 返回值:如果key存在則返回哈希表元素的個數,key不存在則返回false
*php $ret = $redis->hSet('hash1', 'key2', 'hello'); $r22 = $redis->hLen('hash1'); /* 2 */
- hDel(key,hashKey1,hashKey2,…)函數
* 說明:刪除哈希表key中的元素hashKey1,hashKey2等
* 參數: key(哈希表的key),hashKey1,hashKey2(哈希表key中的hashKey)
* 返回值:如果hashKey存在,則返回刪除的hashKey的個數;如果key不存在返回0;如果key不是哈希表則返回false
*php $ret = $redis->hDel('hash1', 'key3', 'key2');/* 刪除兩個hashKey:2 */ $r22 = $redis->hDel('hash2','key1');/* 哈希表hash2不存在:0 */ $r11 = $redis->hDel('string','key1'); /* string不是哈希表:false */
- hKeys(key)函數
* 說明: 返回哈希表key中所有的hashKey,並組成一個索引數組
* 參數: key
* 返回:一個索引數組
*php $ret = $redis->hSet('hash1', 'key2', 'plop'); $r22 = $redis->hSet('hash1','key3',null); $r11 = $redis->hKeys('hash1'); var_dump($r11); /* array(3) { [0]=> string(4) "key1" [1]=> string(4) "key2" [2]=> string(4) "key3" } */
- hVals(key)函數
* 說明:返回哈希表的所有的hashKey的值,組成一個數組(數組的順序是隨機的)
* 參數: key(哈希表的key)
* 返回:返回哈希表中所有值組成的索引數組
*php $r11 = $redis->hVals('hash1'); // array(3) { [0]=> string(4) "plop" [1]=> string(4) "plop" [2]=> string(0) "" }
- hGetAll(key)函數
* 說明:取得整個哈希表的鍵值對,且以關聯數組的形式返回(數組的順序是隨機的)
* 參數: key(哈希表的key)
* 返回:返回一個數組(所有鍵值對組成的關聯數組)
*php $r1 = $redis->hGetAll('hash1'); var_dump($r1); /* array(3) { ["key1"]=> string(4) "plop" ["key2"]=> string(4) "plop" ["key3"]=> string(0) "" } */
- hExists(key,hashKey)函數
* 說明:判斷鍵hashKey是否存在哈希表key中
* 參數:key,hashKey(哈希表中的一個鍵)
* 返回值:如果存在則返回true,其他情況則返回false
*php $r1 = $redis->hExists('hash1','key1'); /* true */ $r2 = $redis->hExists('hash1','key5'); /* false */
- hIncrBy(key,hashKey,value)函數
* 說明:爲哈希表key中鍵爲hashkey的值增加value(整型數);hashKey不存在則默認值爲0
* 參數:key,hashKey(哈希表中的一個鍵),value(將要增加的值)
* 返回:返回hashKey的新值(newValue = oldValue + value),如果value或者oldValue不是整型數則返回false
*php $r2 = $redis->hSet('hash1','key5',9); $r1 = $redis->hIncrBy('hash1','key5',3); /* 12 */
- hIncrByFloat(key,hashKey,value)函數
* 說明:爲哈希表key中鍵爲hashkey的值增加value(浮點數);hashKey不存在則默認值爲0
* 參數:key,hashKey(哈希表中的一個鍵),value(將要增加的值)
* 返回:返回hashKey的新值(newValue = oldValue + value)
*php $r1 = $redis->hIncrByFloat('hash1','key6',3.2); var_dump($r1); /* 3.2 */
- hMSet(key,paraArr)函數
* 說明:爲哈希表key添加值(非string值被強制轉換成string值,null值會被賦予空字符串),鍵值對如果存在,則會被新值覆蓋
* 參數:key,paraArr(有鍵值對組成的關聯數組)
* 返回:賦值成功返回true,失敗返回false
*php $r1 = $redis->hMset('hash1',array('key7'=>'yut','key8'=>'jok')); // true
- hMGet(key,hashKeyArr)函數
* 說明:獲取哈希表key中的鍵值
* 參數:key,hashKeyArr(哈希表key中hashKey組成的數組)
* 返回:返回一個數組(有哈希表中鍵值對組成的關聯數組:hashKey=>value)
*php $r1 = $redis->hMGet('hash1',array('key1','key8','key3')); /* array(3) { ["key1"]=> string(3) "yut" ["key8"]=> string(3) "jok" ["key3"]=> string(0) "" } */
- hScan()函數:暫不介紹
- hStrLen(key,hashKey)函數
* 說明: 獲取哈希表key中鍵hashKey對應的值的長度
* 參數:key,hashKey(哈希表中的一個鍵)
* 返回:返回hashKey對應的值的長度,如果hashKey不存在或key不存在則返回0
* 注意:redis >= 3.2.0才能使用該函數
*php $r1 = $redis->hStrLen('hash1','key1'); // 3