6. Hash

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

Redis 中每个 hash 可以存储 \( 2^{32} – 1\) 键值对(40多亿)。

示例

HSET key field value ­­ 设置 key 指定的哈希集中指定字段的值

> hset myhash field1 Hello

hget ­­ 获取指定的hash field。

> hget myhash field1  
 "Hello"
> hget myhash field3  
 (nil)

由于数据库没有field3,所以取到的是一个空值nil.

HSETNX key field value ­­ 只在 key 指定的哈希集中不存在指定的字段时,设置字段的值。如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。如果字段已存在,该操作无效果。

> hsetnx myhash field "Hello"   
(integer) 1
> hsetnx myhash field "Hello"   
(integer) 0

第一次执行是成功的,但第二次执行相同的命令失败,原因是field已经存在了。

hmset ­­ 同时设置hash的多个field。

> hmset myhash field1 Hello field2 World   
> OK

hmget ­­ 获取全部指定的hash filed。

> hmget myhash field1 field2 field3   
1) "Hello"
2) "World"
3) (nil)

hincrby ­­ 指定的hash filed 加上给定值。

> hset myhash field3 20  
 (integer) 1
> hget myhash field3  
 "20"
> hincrby myhash field3 -8   
(integer) 12
> hget myhash field3   
"12

hexists ­­ 测试指定field是否存在。

> hexists myhash field1
  (integer) 1
> hexists myhash field9
  (integer) 0   
  通过上例可以说明field1存在,但field9是不存在的。

hdel 从 key 指定的哈希集中移除指定的域

127.0.0.1:6379> hkeys myhash
1) "field1"
2) "field"
3) "field2"
4) "field3"
127.0.0.1:6379> hdel myhash field
(integer) 1
127.0.0.1:6379> hkeys myhash
1) "field1"
2) "field2"
3) "field3"
127.0.0.1:6379>

hlen ­­ 返回指定hash的field数量。

> hlen myhash
  (integer) 3

hkeys ­­ 返回hash的所有field。

> hkeys myhash   
> 1) "field2"   
> 2) "field"   
> 3) "field3"

说明这个hash中有3个field。

hvals ­­ 返回hash的所有value。

> hvals myhash   
1) "World"   
2)"Hello"   
3)"12"

说明这个hash中有3个field。

hgetall ­­ 获取某个hash中全部的filed及value。

> hgetall myhash   
1) "field2"   
2) "World" 
3) "field"  
4) "Hello"   
5) "field3"   
6) "12"

HSTRLEN — 返回 hash指定field的value的字符串长度

127.0.0.1:6379> HSTRLEN myhash field1
(integer) 5
下一节:Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。