目錄
一、Hash和String的區別
二、常用命令與演示
三、Redis中Hash類型應用場景
一、Hash和String的區別
這是String,
key | value |
name | Trxcx |
這是Hash,
key | value | |
studentTrxcx | name | Trxcx |
age | 21 | |
sex | male |
可以明顯的看出,String的value就是一條數據,而Hash的value是由多個“key-value”組成的。
因此,很容易發現,Hash的value適用于存儲對象。
為了明確地區分,我們把Hash的value部分的“key”稱為field,value部分的“value”稱為value。
例如,上面的例子中,studentTrxcx是key,name是field,Trxcx是value。
總結:
關于String,每一條數據(value)由一個索引(key)獲得;
關于Hash,每一條數據(value)由兩個索引(key和field)獲得。
格式 | 含義 | 例子 |
hset key field value | 緩存key下的field-value | hset?studentTrxcx name Trxcx |
hget key field | 獲取key下的field對應的value值 | hget?studentTrxcx name |
hexists key field | 判斷key下的field是否存在 | hexists?studentTrxcx name |
hdel?key field | 刪除key下的field字段 | hdel studentTrxcx age |
hincrby key field increment | key下field字段對應value值加上increment | hincrby studentTrxcx age 1 |
hlen key | 獲取key下的field字段數量 | hlen studentTrxcx |
hkeys key | 獲取key下所有field字段 | hkeys studentTrxcx |
hvals key | 獲取key下所有field字段對應的value值 | hvals studentTrxcx |
hgetall key | 獲取每一組field-value值 | hgetall studentTrxcx |
127.0.0.1:6379> hset studentTrxcx name Trxcx
(integer) 1
127.0.0.1:6379> hget studentTrxcx name
"Trxcx"
127.0.0.1:6379> hset studentTrxcx age 21
(integer) 1
127.0.0.1:6379> hget studentTrxcx age
"21"
127.0.0.1:6379> hget studentTrxcx // 無法直接hget到key下的所有數據
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hexists studentTrxcx name // key對應的field存在,則返回1,否則返回0
(integer) 1
127.0.0.1:6379> hexists studentTrxcx sex
(integer) 0
127.0.0.1:6379> hdel studentTrxcx age
(integer) 1
127.0.0.1:6379> hget studentTrxcx age
(nil)
127.0.0.1:6379> hset studentTrxcx age 21
(integer) 1
127.0.0.1:6379> hincrby studentTrxcx age 1
(integer) 22
127.0.0.1:6379> hget studentTrxcx age
"22"
127.0.0.1:6379> hlen studentTrxcx
(integer) 2
127.0.0.1:6379> hkeys studentTrxcx
1) "name"
2) "age"
127.0.0.1:6379> hvals studentTrxcx
1) "Trxcx"
2) "22"
127.0.0.1:6379> hgetall studentTrxcx
1) "name"
2) "Trxcx"
3) "age"
4) "22"
三、Redis中Hash類型應用場景
共享session,和使用string的區別是:
如果把user對象轉換為json字符串存redis,此時使用string類型來實現共享session,方便查找但不利于修改(要改動某個字段需要獲取整個對象)【實際中常用】
如果把user對象轉換為hash對象存redis,此時使用hash類型來實現共享session,方便修改但不利于查找(查找的時候獲取到的是map,要再次轉換為對象)