Redis 是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型。
PS:除了散列类型,Redis的其他数据类型同样不支持数据类型嵌套。比如集合类型的每个元素都只能是字符串,不能是另一个集合或散列表等。
散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。
根据下面的命令,很容易理解。
1.赋值与取值
HSET key field value
HGET key field
HMSET key field value [field value ...]
HMGET key field [field ...]
HGATALL key
HSET 命令用来给字段赋值,HGET 命令用来获得字段的值。
redis> HSET car price 500
(integer) 1
redis> HSET car name BMW
(integer) 1
redis> HGET car name
"BMW"
PS:HSET 命令不区分插入和更新操作,当执行插入操作(即之前字段不存在)HSET 命令会返回 1,当执行更新操作(即之
前字段已经存在)HSET 命令会返回 0。更进一步,当键本身不存在时,HSET命令还会自动建立它。
当需要同时设置多个字段的值时,可以使用 HMSET 命令。
HMSET key field1 value1 field2 value2
相应的,HMSET 命令可以同时获得多个字段的值:
redis> HMSET car price name
1) "500"
2) "BMW"
如果想要获取键中所有字段和字段值却不知道键中有哪些字段时,应该使用 HGETALL 命令。
redis> HGETALL car
1) "price"
2) "500"
3) "name"
4) "BMW"
2.判断字段是否存在
HEXISTS key field
HEXISTS 命令用来判断一个字段是否存在,存在返回 1,反则返回 0(键不存在也会返回 0)
redis> HEXISTS car model
(integer) 0
redis> HSET car model C200
(integer) 1
redis> HEXISTS car model
(integer) 1
3.当字段不存在时赋值
HSETTNX key field value
如果字段已经存在,HSETTNX 命令将不执行任何操作。HSETTNX 命令是原子操作,不必担心竞态条件。
4.增加数字
HINCRBY key field increment
使字段值增加指定的整数。
redis> HINCRBY person score 60
(integer) 60
5.删除字段
HDEL key field [field ...]
HDEL 命令可以删除一个或者多个字段,返回值是被删除的字段的个数。
redis> HDEL car price
(integer) 1
redis> HDEL car price
(integer) 0
6.只获取字段名或字段值
HKEYS key
HVALS key
HKEYS 命令用来获取键中所有的字段名称
redis> HKEYS car
1) "name"
2) "model"
HVALS 命令用来获得键中所有字段值。
redis> HVALS car
1) "BMW"
2) "C200"
7.获得字段数量
HLEN key
redis> HLEN car
(integer) 2