標籤:
Redis hash是一個string類型的 field和value的映射表.它的添加、刪除操作都是O(1)(平均)。hash特別適合用於儲存物件。相較於將對象的每個欄位存成單個string 類型。將一個Object Storage Service在hash類型中會佔用更少的記憶體,並且可以更方便的存取整個對象。省記憶體的原因是建立一個hash對象時開始是用zipmap(又 稱為small hash)來儲存的。這個zipmap其實並不是hash table,但是zipmap相比正常的hash實現可以節省不少hash本身需要的一些中繼資料存放區開銷。儘管zipmap的添加,刪除,尋找都是 O(n),但是由於一般對象的field數量都不太多。所以使用zipmap也是很快的,也就是說添加刪除平均還是O(1)。如果field或者 value的大小超出一定限制後,Redis會在內部自動將zipmap替換成正常的hash實現. 這個限制可以在設定檔中指定
hash-max-zipmap-entries 64 #配置欄位最多64個。
hash-max-zipmap-value 512 #配置value最大為512位元組。
1、hset
設定hash field為指定值,如果key不存在,則先建立。
redis 127.0.0.1:6379> hset myhash field1 Hello
(integer) 1
redis 127.0.0.1:6379>
2、hsetnx
設定hash field為指定值,如果key不存在,則先建立。如果field已經存在,返回0,nx是not exist的意思。
redis 127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 1
redis 127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 0
redis 127.0.0.1:6379>
第一次執行是成功的,但第二次執行相同的命令失敗,原因是field已經存在了。
3、hmset
同時設定hash的多個field。
redis 127.0.0.1:6379> hmset myhash field1 Hello field2 World
OK
redis 127.0.0.1:6379>
4、hget
擷取指定的hash field。
redis 127.0.0.1:6379> hget myhash field1
"Hello"
redis 127.0.0.1:6379> hget myhash field2
"World"
redis 127.0.0.1:6379> hget myhash field3
(nil)
redis 127.0.0.1:6379>
由於資料庫沒有field3,所以取到的是一個空值nil。
5、hmget
擷取全部指定的hash filed。
redis 127.0.0.1:6379> hmget myhash field1 field2 field3
1) "Hello"
2) "World"
3) (nil)
redis 127.0.0.1:6379>
Redis詳解:hashes資料類型及操作