介绍
我们现在已经知道Redis是采用字典结构以键值对对形式存储数据对,而散列类型(hash)和字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能潜逃其他数据类型.
散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象对属性,而字段值存储属性值.列入要存储ID为2对汽车对象,可以分别使用名为color name 和price对3个字段来存储该辆汽车的颜色 名称 和价格. 存储结构如下
命令
- 赋值与取值
HSET 命令用来给字段赋值,而HGET命令用来获得字段的值.用法如下:
127.0.0.1:6379> HSET car price 300
(integer) 1
127.0.0.1:6379> HSET car name BMW
(integer) 1
127.0.0.1:6379> HGET car name
"BMW"
HSET命令的方便之处在于不区分插入和更新操作,这意味修改数据时不用先判断字段是否存在来决定要执行的时插入还是更新.当执行的是插入操作时命令返回 1 更行操作返回0. 也就是说当键本身不存在时,HSET还会自动建立它.
如果要设置多个字段时,可以使用HMSET,如:
// 设置多个字段
127.0.0.1:6379> HMSET key field1 value1 field2 value2
OK
// 获取多个字段
127.0.0.1:6379> HMGET key field1 field2
1) "value1"
2) "value2"
// 获取全部字段
127.0.0.1:6379> HGETAll key
1) "field1"
2) "value1"
3) "field2"
4) "value2"
- 判断字段是否存在
HEXISTS命令用来判断一个字段是否存在.如果存在返回1,反之返回0,如果键不存在也会返回0
// 字段存在
127.0.0.1:6379> HEXISTS car name
(integer) 1
// 字段不存在
127.0.0.1:6379> HEXISTS car name2
(integer) 0
// 键不存在
127.0.0.1:6379> HEXISTS car2 name
(integer) 0
-
当字段不存在时赋值
HSETNX(NX:表示ifNotExists)命令与HSET命令类似,区别在于如果字段已经存在,HSETNX命令将不执行任何操作 -
增加数字
上一篇中学到了,INCRBY,HINCRBY命令与之类似,可以使字段值增加指定的整数.散列类型没有HINCR命令,
// 如果键值不存在则会默认创建 初始值为0
127.0.0.1:6379> HINCRBY person score 60
(integer) 60
127.0.0.1:6379> HGET person score
"60"
4 删除字段
HDEL 命令可以删除一个或者多个,返回值是被删除的字段个数;
// 一共两个字段
127.0.0.1:6379> HGETALL car
1) "price"
2) "300"
3) "name"
4) "BMW"
// 删除一个
127.0.0.1:6379> HDEL car price
(integer) 1
// 删除后的所有字段
127.0.0.1:6379> HGETALL car
1) "name"
2) "BMW"
- 命令拾遗
4.1 值获取字段名或字段值
有时仅仅要获取键中所有字段的名字而不需要字段值,那么可以使用HKEYS命令
127.0.0.1:6379> HKEYS car
1) "name"
HVALS 命令与HKEYS命令相对应,HVALS命令用来获得键中所有字段值
127.0.0.1:6379> HVALS car
1) "BMW"