Redis的哈希是field和value之间的映射,即键值对的集合,所以特别适合用于存储对象。
我们可以将哈希想象成map。
一,常用的指令
1)hset和hget;hmset和hmget
127.0.0.1:6379> hset mh name laoli (integer) 1 127.0.0.1:6379> hget mh name "laoli" 127.0.0.1:6379> hset mh sex boy (integer) 1 127.0.0.1:6379> hget mh sex "boy"
127.0.0.1:6379> hmset student name li sex boy age 50 OK 127.0.0.1:6379> hmget student name sex age 1) "li" 2) "boy" 3) "50"
将数据覆盖,将上面的50替换成30
127.0.0.1:6379> hmset student name li sex boy age 30 OK 127.0.0.1:6379> hmget student name sex age 1) "li" 2) "boy" 3) "30"
2)hdel 删除filed
127.0.0.1:6379> hdel student age (integer) 1 127.0.0.1:6379> hmget student name sex age 1) "li" 2) "boy" 3) (nil)
3)hgetall和hkeys,hvals
hgetall是获取哈希表中对应key中所有的字段和值。
hkeys是获取哈希表中对应key中所有的字段。
hvals是获取哈希表中对应key中所有的值。
127.0.0.1:6379> hgetall student 1) "name" 2) "li" 3) "sex" 4) "boy" 127.0.0.1:6379> hkeys student 1) "name" 2) "sex"
127.0.0.1:6379> hvals student
1) "li"
2) "boy"
4)hsetnx
只有在字段 field 不存在时,设置哈希表字段的值
127.0.0.1:6379> hgetall student 1) "name" 2) "li" 3) "sex" 4) "boy" 127.0.0.1:6379> hsetnx student age 29 (integer) 1 127.0.0.1:6379> hgetall student 1) "name" 2) "li" 3) "sex" 4) "boy" 5) "age" 6) "29"
127.0.0.1:6379> hsetnx student age 30
(integer) 0
5)hexists 查看哈希表中的key中,指定的字段是否存在
127.0.0.1:6379> hgetall student 1) "name" 2) "li" 3) "sex" 4) "boy" 5) "age" 6) "30" 127.0.0.1:6379> hexists student age (integer) 1 127.0.0.1:6379> hexists student ll (integer) 0
6)hlen hash的长度
127.0.0.1:6379> hlen student (integer) 3 127.0.0.1:6379> hkeys student 1) "name" 2) "sex" 3) "age"
二,应用场景
hash可以应该用到变更数据比较多的场合,比如对象熟悉的变化比较多的场景;
hash存储时开销较小,修改时,可以仅仅修改其中一个filed(属性)的值,开销小