Redis 的vaule
redis 提供五種數據類型:string,hash,list,set 及sorted set。
hash 類型
hash 是一個string 類型的field 和value 的映射表。添加,刪除操作都是O(1)(平均)。
hash 特別適合用於存儲對象。相對於將對象的每個字段存成單個string 類型。將一個對象
存儲在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 字節
hash 類型數據操作指令簡介
hset key field value 設置hash field為指定值,如果key不存在,則創建
hget key field 獲取指定的hash field。
hmget key filed1....fieldN 獲取全部指定的hash filed。
hmset key filed1 value1 ...... filedN valueN 同時設置hash的多個field。
hincrby key field integer 將指定的hash filed 加上指定值。成功返回hash filed 變更後的
值。
hexists key field 檢測指定field是否存在。
hdel key field 刪除指定的hash field。
hlen key 返回指定hash的field 數量。
5
hkeys key 返回hash 的所有field。
hvals key 返回hash的所有value。
hgetall 返回hash的所有filed和value
1 hset命令
對hash中的字段賦值,如果不存在則創建否則覆蓋
返回值:被創建返回1,被更新返回0
例子:
redis 127.0.0.1:6379> hset debughash field1 "hello"
(integer) 1
redis 127.0.0.1:6379> hget debughash field1
"hello"
redis 127.0.0.1:6379> hset debughash field1 "world"
(integer) 0
redis 127.0.0.1:6379> hget debughash field1
"world"
redis 127.0.0.1:6379>
2 hget命令
獲取field對於的value
返回值:存在返回value值,否則返回 nil
例子:
redis 127.0.0.1:6379> hset debughash field2 "hello"
(integer) 1
redis 127.0.0.1:6379> hget debughash field2
"hello"
redis 127.0.0.1:6379> hget debughash field3
(nil)
3 hexists
判斷field是否存在
返回值:存在返回1,否則返回0
例子:
redis 127.0.0.1:6379> hexists debughash field2
(integer) 1
redis 127.0.0.1:6379> hexists debughash field3
(integer) 0
4 hdel
刪除field
返回值:返回刪除的數量
例子:
redis 127.0.0.1:6379> hdel debughash field2
(integer) 1
redis 127.0.0.1:6379> hdel debughash field3
(integer) 0
redis 127.0.0.1:6379> hget debughash field3
(nil)
5 hkeys
返回hash下包含的field
例子:
redis 127.0.0.1:6379> hkeys debughash
1) "field1"
redis 127.0.0.1:6379> hset debughash field2 "word"
(integer) 1
redis 127.0.0.1:6379> HKEYS debughash
1) "field1"
2) "field2"
redis 127.0.0.1:6379> HKEYS debughash field2
(error) ERR wrong number of arguments for 'hkeys' command
redis 127.0.0.1:6379> HKEYS debughash
1) "field1"
2) "field2"
redis 127.0.0.1:6379>
6 hlen
返回hash下含有field的數量
例子:
redis 127.0.0.1:6379> hlen debughash
(integer) 2
7 hmset
設置多個field值,存在覆蓋,否則創建
例子:
redis 127.0.0.1:6379> hmset testhash field1 "hello" field2 "world"
OK
redis 127.0.0.1:6379> hget testhash field1
"hello"
redis 127.0.0.1:6379> hget testhash field2
"world"
8 hmget
獲取多個field的值
例子:
redis 127.0.0.1:6379> hmget testhash field1 field2 field3
1) "hello"
2) "world"
3) (nil)
9 hgetall
獲取hash下所有field與value
例子:
redis 127.0.0.1:6379> hgetall testhash
1) "field1"
2) "hello"
3) "field2"
4) "world"
10 hvals
獲取value值
例子:
redis 127.0.0.1:6379> hvals testhash
1) "hello"
2) "world"
11 hsetnx
只有field不存在的時候,設置value
返回值:如果創建成功返回1,若存在返回0
例子:
redis 127.0.0.1:6379> hgetall testhash
1) "field1"
2) "hello"
3) "field2"
4) "world"
redis 127.0.0.1:6379> hsetnx testhash field3 "00000" (integer) 1
redis 127.0.0.1:6379> hgetall testhash WWW.dnjishu.com
1) "field1"
2) "hello"
3) "field2"
4) "world"
5) "field3" 6) "00000" redis 127.0.0.1:6379>
12 hincrby
按整數自增,如果不存在則field賦值為value,如果不是數值型的字符串,返回error
返回值:返回自增後的值
例子:
redis 127.0.0.1:6379> hgetall testhash
1) "field1"
2) "hello"
3) "field2"
4) "world"
5) "field3" 6) "00000" redis 127.0.0.1:6379> hincrby testhash field4 5 (integer) 5 redis 127.0.0.1:6379> hicrby testhash field4 5 (error) ERR unknown command 'hicrby' redis 127.0.0.1:6379> hincrby testhash field4 5 (integer) 10 redis 127.0.0.1:6379> hincrby testhash field4 -11 (integer) -1 redis 127.0.0.1:6379> hset testhash field5 "yy" (integer) 1 redis 127.0.0.1:6379> hincrby testhash field5 -11 (error) ERR hash value is not an integer redis 127.0.0.1:6379> 13 hincrbyfloat
按浮點數自增