Hash是由键值对组成的map。Hashes的底层是通过字典实现的。一个哈希表里面可以有多个哈希表节点。而每个哈希节点就保存了字典中的一个键值对。
字典是一种用于保存键和值对的抽象数据结构。字典里的每一个键都是唯一的。
在哈希表里面存在一个哈希表数组。其中每个元素指向一个字典的键值对。
在哈希表里面还记录了一个哈希表的大小。已经使用的节点数。还有一个sizemask,它总是比哈希表的大小小1,
用于决定一个键应该放在数组的哪个索引上。
在每个哈希表节点中,都保存了下一个节点,形成链表。
在Redis中大概有15个操作Hash的命令。
HSET key field value:设置hash里面key中的field字段的值设为value,时间复杂度为O(1)。
HGET key field:获取hash中域key的field的值,,时间复杂度为O(1)。
HDEL key field [field ...]:删除域key中一个或多个Hash的field,
HMSET key field value [field value ...]:设置hash表中域key的多个字段值
HMGET key field [field ...]:获取hash里面域key的多个指定字段的值
HKEYS key:获取hash表中域key的所有字段
HVALS key:获得hash表中key域的所有值
HGETALL key:从hash中读取域key中全部的域和值
HLEN key:获取hash里域key所有字段的数量
HEXISTS key field:判断field是否存在于hash中
HSETNX key field value:设置hash的一个字段,只有当这个字段不存在时有效
HSTRLEN key field:获取hash里面指定field的长度
127.0.0.1:6379> HSET user name zhangsan
(integer) 1
127.0.0.1:6379> HGET user name
"zhangsan"
127.0.0.1:6379> HMSET user age 20 address shanghai birthday 12/18
OK
127.0.0.1:6379> HMGET user name age
1) "zhangsan"
2) "20"
127.0.0.1:6379> HDEL user age
(integer) 1
127.0.0.1:6379> HKEYS user
1) "name"
2) "address"
3) "birthday"
127.0.0.1:6379> HVALS user
1) "zhangsan"
2) "shanghai"
3) "12/18"
127.0.0.1:6379> HGETALL user
1) "name"
2) "zhangsan"
3) "address"
4) "shanghai"
5) "birthday"
6) "12/18"
127.0.0.1:6379> HLEN user
(integer) 3
127.0.0.1:6379> HEXISTS user age
(integer) 0
127.0.0.1:6379> HEXISTS user name
(integer) 1
127.0.0.1:6379> HSETNX user age 18
(integer) 1
127.0.0.1:6379> HSETNX user name lisi
(integer) 0
127.0.0.1:6379> HSTRLEN user name
(integer) 8
127.0.0.1:6379>
HINCRBY key field increment:将hash中指定域的值增加给定的数字
HINCRBYFLOAT key field increment:将hash中指定域的值增加给定的浮点
127.0.0.1:6379> HINCRBY user age 5
(integer) 23
127.0.0.1:6379> HINCRBYfloat user age 5.2
"28.2"
HSCAN key cursor [MATCH pattern] [COUNT count]:迭代hash里面的元素
每次都返回一个游标,初始值为0。