目录
1. hset KEY key1 value1 key2 value2 ...
2. hget KEY key
3. hgetall KEY
4. hmget KEY key1 key2 ...
5. hkeys KEY
6. hvals KEY
7. hdel KEY key1 key2 ...
8. hlen KEY
9. hexists KEY key
10. hincrby KEY key num
11. hsetnx KEY key value
Hash的内部存储结构相当于一个map,存储的是一个个键值对;所以在redis中相当于
KEY-(key-value)。Hash更适合存储一个对象,或者经常变动的信息。
1. hset KEY key1 value1 key2 value2 ...
在哈希表中插入键值对,如果该哈希表不存在则会先创建;当哈希表中已经存在要插入的key时则会覆盖。返回值为添加的个数而不是修改的个数。
2. hget KEY key
获取指定哈希表中指定键值对的value。
3. hgetall KEY
输出指定哈希表的所有键值对,并按照一行key一行value的顺序输出。
4. hmget KEY key1 key2 ...
同时执行多次hget操作。
那为什么没有一次性创建多个哈希表的操作呢,或者为什么不能像String类型有mset的那样有mhset呢?
理论上当然可以,但实际行不通,因为hset的操作第一个是KEY,后面就是这个KEY的一些键值对了,如果一次创建多个哈希表,那剩下的哈希表信息肯定是放在第一个哈希表的后面,也就是hset KEY1 k1 v1 k2 v2 KEY2 k1 v1 k2 v2... ,这么写肯定是可以区分的,但如果实现起来就无法区分KEY2究竟是另一个哈希表还是KEY1的一个键值对了,所以只有一次创建一个哈希表的操作。
思维再拓展一下,为什么hmget只能获取一个哈希表的多个键值对呢?这也是因为无法区分后面的内容是另一个哈希表还是这个哈希表的键值对了。
5. hkeys KEY
只输出一个哈希表的所有key。
6. hvals KEY
只输出一个哈希表的所有value。
7. hdel KEY key1 key2 ...
删除指定哈希表中的指定键值对。
8. hlen KEY
输出指定哈希表的长度。
9. hexists KEY key
判断一个哈希表中是否存在指定的键值对。
10. hincrby KEY key num
对一个哈希表中指定键值对的value增加指定步长,当num为负数时代表减少指定步长,hash类型没有对应的hdecrby。执行这个操作要保证对应键值对的value必须是数字。
11. hsetnx KEY key value
当该哈希表不存在或者指定键值对不存在时才会创建键值对。