天天看點

Redis---hashset資料類型操作

我們可以将redis中的hashes類型看成具有string key和string value的map容器。是以該類型非常适合于存儲值對象的資訊。如username、password和age等。如果hash中包含很少的字段,那麼該類型的資料也将僅占用很少的磁盤空間。每一個hash可以存儲4294967295個鍵值對。

非常适合儲存一個對象,比如張三,有性别、姓名、年齡。

指令原型

時間複雜度

指令描述

傳回值

hset key field value

o(1)

為指定的key設定field/value對,如果key不存在,該指令将建立新key以參數中的field/value對,如果參數中的field在該key中已經存在,則用新值覆寫其原有值。

1表示新的field被設定了新值,0表示field已經存在,用新值覆寫原有值。

hget key field

傳回指定key中指定field的關聯值。

傳回參數中field的關聯值,如果參數中的key或field不存,傳回nil。

hexists key field

判斷指定key中的指定field是否存在。

1表示存在,0表示參數中的field或key不存在。

hlen key

擷取該key所包含的field的數量。

傳回key包含的field數量,如果key不存在,傳回0。

hdel key field [field …]

o(n)

時間複雜度中的n表示參數中待删除的字段數量。從指定key的hashes value中删除參數中指定的多個字段,如果不存在的字段将被忽略。如果key不存在,則将其視為空hashes,并傳回0.

實際删除的field數量。

hsetnx key field value

隻有當參數中的key或field不存在的情況下,為指定的key設定field/value對,否則該指令不會進行任何操作。

1表示新的field被設定了新值,0表示key或field已經存在,該指令沒有進行任何操作。

hincrby key field increment

增加指定key中指定field關聯的value的值。如果key或field不存在,該指令将會建立一個新key或新field,并将其關聯的value初始化為0,之後再指定數字增加的操作。該指令支援的數字是64位有符号整型,即increment可以負數。

傳回運算後的值。

hgetall key

時間複雜度中的n表示key包含的field數量。擷取該鍵包含的所有field/value。

其傳回格式為一個field、一個value,并以此類推。 field/value的清單。

hkeys key

時間複雜度中的n表示key包含的field數量。

傳回指定key的所有fields名。field的清單。

hvals key

傳回指定key的所有values名。 value的清單。

hmget key field [field …]

時間複雜度中的n表示請求的field數量。擷取和參數中指定fields關聯的一組values。如果請求的field不存在,其值傳回nil。如果key不存在,該指令将其視為空hash,是以傳回一組nil。

傳回和請求fields關聯的一組values,其傳回順序等同于fields的請求順序。

hmset key field value [field value …]

時間複雜度中的n表示被設定的field數量。逐對依次設定參數中給出的field/value對。

如果其中某個field已經存在,則用新值覆寫原有值。如果key不存在,則建立新key,同時設定參數中的field/value。

Redis---hashset資料類型操作

hset/hget/hdel/hexists/hlen/hsetnx:

在shell指令行啟動redis用戶端程式

/> redis-cli

給鍵值為myhash的鍵設定字段為field1,值為stephen。

redis 127.0.0.1:6379> hset myhash field1 “stephen”

(integer) 1

擷取鍵值為myhash,字段為field1的值。

redis 127.0.0.1:6379> hget myhash field1

“stephen”

myhash鍵中不存在field2字段,是以傳回nil。

redis 127.0.0.1:6379> hget myhash field2

(nil)

給myhash關聯的hashes值添加一個新的字段field2,其值為liu。

redis 127.0.0.1:6379> hset myhash field2 “liu”

擷取myhash鍵的字段數量。

redis 127.0.0.1:6379> hlen myhash

(integer) 2

判斷myhash鍵中是否存在字段名為field1的字段,由于存在,傳回值為1。

redis 127.0.0.1:6379> hexists myhash field1

删除myhash鍵中字段名為field1的字段,删除成功傳回1。

redis 127.0.0.1:6379> hdel myhash field1

再次删除myhash鍵中字段名為field1的字段,由于上一條指令已經将其删除,因為沒有删除,傳回0。

(integer) 0

判斷myhash鍵中是否存在field1字段,由于上一條指令已經将其删除,因為傳回0。

通過hsetnx指令給myhash添加新字段field1,其值為stephen,因為該字段已經被删除,是以該指令添加成功并傳回1。

redis 127.0.0.1:6379> hsetnx myhash field1 stephen

由于myhash的field1字段已經通過上一條指令添加成功,因為本條指令不做任何操作後傳回0。

2. hincrby:

删除該鍵,便于後面示例的測試

redis 127.0.0.1:6379> del myhash

準備測試資料,該myhash的field字段設定值1。

redis 127.0.0.1:6379> hset myhash field 5

給myhash的field字段的值加1,傳回加後的結果。

redis 127.0.0.1:6379> hincrby myhash field 1

(integer) 6

給myhash的field字段的值加-1,傳回加後的結果。

redis 127.0.0.1:6379> hincrby myhash field -1

(integer) 5

給myhash的field字段的值加-10,傳回加後的結果。

redis 127.0.0.1:6379> hincrby myhash field -10

(integer) -5

hgetall/hkeys/hvals/hmget/hmset:

删除該鍵,便于後面示例測試。

為該鍵myhash,一次性設定多個字段,分别是field1 = “hello”, field2 = “world”。

redis 127.0.0.1:6379> hmset myhash field1 “hello” field2 “world”

ok

擷取myhash鍵的多個字段,其中field3并不存在,因為在傳回結果中與該字段對應的值為nil。

redis 127.0.0.1:6379> hmget myhash field1 field2 field3

1) “hello”

2) “world”

3) (nil)

傳回myhash鍵的所有字段及其值,從結果中可以看出,他們是逐對列出的。

redis 127.0.0.1:6379> hgetall myhash

1) “field1”

2) “hello”

3) “field2”

4) “world”

僅擷取myhash鍵中所有字段的名字。

redis 127.0.0.1:6379> hkeys myhash

2) “field2”

僅擷取myhash鍵中所有字段的值。

redis 127.0.0.1:6379> hvals myhash