3、hash雜湊類型
簡介
hash散列類似於一個小型的Redis資料庫
一個雜湊可以包含多個鍵值對
散列的每個鍵都不能重複,各不相同,無序排列
其值可以是字串或數字值
對於數字值,可以執行自增或自減操作
散列結構
下面的結構中,user代表鍵名,其可以包含多個不同的鍵值對
[ "user":[ "name1":"yanying1", "name2":"yanying2", "name3":"yanying3" ] ]
操作方法
演示(命令列+ PHP演示)
命令行:
首先,我們將一個鍵值對到散列。如果 成功則回傳1;如果鍵已經存在,回傳0
hset hash-key sub-key1 value1 // 返回 1
我們再增加一個不存在的鍵值對
hset hash-key sub-key2 value2 // 返回 1
這個時候,散列中已經存在鍵sub-key1和sub-key2,接下來我們再新增一個相同的鍵sub-key1到散列中,看看會發生什麼:
hset hash-key sub-key1 value1 // 返回 0,由于该键已经存在
下面我們透過hget取得一個給定鍵sub-key1的值。
hget hash-key sub-key1 // "value1"
成功獲取了一個值。我們再取得新增的所有元素看看,剛剛的到底增加了哪幾個值
hgetall hash-key
其結果如下。我們發現,第一個結果為第一個鍵值對的鍵,第二個結果為鍵值對的值,以此類推,每兩個為一組。
"sub-key1""value1""sub-key2""value2"
下面我們試著刪除一個鍵試試,我們會發現如果 該鍵之前存在於散列中,那麼刪除時候則返回1,否則,返回0
hdel hash-key sub-key1 // 该键之前存在于散列,返回1
我們再試著刪除一次sub-key1,發現刪除 不存在的鍵的時候,回傳結果0
hdel hash-key sub-key1
我們再次取得全部鍵值對,看看還剩些什麼。
hgetall hash-key
其結果為,少了兩個結果,畢竟剛剛刪除了一個鍵值對
"sub-key1""value1"
PHP版本演示
第一步,鏈接redis數據庫
$redis = new Redis();$redis->connect('127.0.0.1', 6379);
我們先插入一個鍵值對到hash-key散列。 1代表插入成功;0元素代表已經存在
$redis->hset('hash-key','sub-key1','value1'); // int 1,元素插入成功,之前不存在该键
我們再次插入相同鍵值對
$redis->hset('hash-key','sub-key1','value1'); // int 0,元素插入失败,该键已经存在
為了下面的演示使用,我們繼續插入一些其他的值
$redis->hset('hash-key','sub-key2','value2'); // int 0
下面我們使用hget獲取鍵對應的值。我們試試看sub-key2的值。
$redis->hget('hash-key','sub-key2'); // 'value2'
獲取了一個後,我們在嘗試使用hgetall獲取剛剛插入的全部值,看看裡麵包含哪些鍵值對
$redis->hgetall('hash-key');
獲得結果,是一個包含完整鍵值得數組
array (size=2) 'sub-key1' => string 'value1' (length=6) 'sub-key2' => string 'value2' (length=6)
查看完了所有的鍵值對,我們嘗試刪除其中一個鍵。如果之前鍵存在於雜湊中,則返回1,反之,返回0
$redis->hdel('hash-key','sub-key1'); // 该键之前存在,返回int 1
我們再次嘗試刪除sub-key1鍵,發現其返回0. 則說明該鍵不存在集合中,刪除失敗
$redis->hdel('hash-key','sub-key1'); // 该键不存在,返回int 0
下面我們使用hgetall查看下散列中還剩餘的所有鍵值對
$redis->hgetall('hash-key');
發現,只傳回了包含一個鍵值對的陣列。
array (size=1) 'sub-key2' => string 'value2' (length=6)
原因即是,剛剛sub-key1已經被刪除