Redis 哈希(Hash)

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
在以下实例中,我们设置了 redis 的一些描述信息(name, age, sex,address) 到哈希表的 user中。

127.0.0.1:6379> hmset user name "gzh" age 30 address "sxyc" sex 1
OK
127.0.0.1:6379> hgetAll user
1) "name"
2) "gzh"
3) "age"
4) "30"
5) "address"
6) "sxyc"
7) "sex"
8) "1"
127.0.0.1:6379>

Redis hash 命令

下面是主要的hash命令

  • HDEL key field1 [field2]
1、Redis Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
2、Redis Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
127.0.0.1:6379> hset user name "zhangjh"
(integer) 1
127.0.0.1:6379> hdel user name
(integer) 1
127.0.0.1:6379> hdel user name
(integer) 0
  • HEXISTS key field
1、Redis Hexists 命令用于查看哈希表的指定字段是否存在
2、如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。
127.0.0.1:6379> hexists user name
(integer) 0
127.0.0.1:6379> hset user name "gzh"
(integer) 1
127.0.0.1:6379> hexists user name
(integer) 1
  • HGET key field
1、Redis Hget 命令用于返回哈希表中指定字段的值。
2、返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil 。
127.0.0.1:6379> hget user name
"gzh"
127.0.0.1:6379> hget user age
(nil)
  • HGETALL key
1、Redis Hgetall 命令用于返回哈希表中,所有的字段和值。
在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。
2、以列表形式返回哈希表的字段及字段值。 若 key 不存在,返回空列表。
127.0.0.1:6379> hget user name
"gzh"
127.0.0.1:6379> hget user age
(nil)
127.0.0.1:6379> hset user age 30
(integer) 1
127.0.0.1:6379> hgetall user
1) "name"
2) "gzh"
3) "age"
4) "30"
  • HINCRBY key field increment
1、Redis Hincrby 命令用于为哈希表中的字段值加上指定增量值。
2、增量也可以为负数,相当于对指定字段进行减法操作。
3、如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
4、如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。
5、对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。
6、本操作的值被限制在 64 位(bit)有符号数字表示之内。
127.0.0.1:6379> hget user age
"30"
127.0.0.1:6379> hincrby user age 3
(integer) 33
127.0.0.1:6379> hget user age
"33"
127.0.0.1:6379> hincrby user age -3
(integer) 30
127.0.0.1:6379> hget user age
"30"
  • HINCRBYFLOAT key field increment
1、Redis Hincrbyfloat 命令用于为哈希表中的字段值加上指定浮点数增量值。
2、如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。
3、执行 Hincrbyfloat 命令之后,哈希表中字段的值。
127.0.0.1:6379> hincrbyfloat user money 1000.0
"1000"
127.0.0.1:6379> hget user money
"1000"
  • HKEYS key
1、Redis Hkeys 命令用于获取哈希表中的所有域(field)。
2、包含哈希表中所有域(field)列表。 当 key 不存在时,返回一个空列表。
127.0.0.1:6379> hkeys user
1) "name"
2) "age"
3) "money"
  • HLEN key
1、Redis Hlen 命令用于获取哈希表中字段的数量。
2、哈希表中字段的数量。 当 key 不存在时,返回 0 。
127.0.0.1:6379> hlen user
(integer) 3
  • HMGET key field1 [field2]
1、Redis Hmget 命令用于返回哈希表中,一个或多个给定字段的值。
2、如果指定的字段不存在于哈希表,那么返回一个 nil 值。
3、一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。
127.0.0.1:6379> hmget user age name address money
1) "30"
2) "gzh"
3) (nil)
4) "1000"
  • HMSET key field1 value1 [field2 value2 ]
1、Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。
此命令会覆盖哈希表中已存在的字段。
2、如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。
3、
127.0.0.1:6379> hmset user2 age 26 name xqq 
OK
127.0.0.1:6379> hmget user2 age name
1) "26"
2) "xqq"
  • HSET key field value
1、Redis Hset 命令用于为哈希表中的字段赋值 。
2、如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
3、如果字段已经存在于哈希表中,旧值将被覆盖。
4、如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。
127.0.0.1:6379> hset user2 money 10000
(integer) 1
127.0.0.1:6379> hset user2 age 24
(integer) 0
  • HSETNX key field value
1、Redis Hsetnx 命令用于为哈希表中不存在的的字段赋值 。
2、如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
3、如果字段已经存在于哈希表中,操作无效。
4、如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。
5、设置成功,返回 1 。 如果给定字段已经存在且没有操作被执行,返回 0
127.0.0.1:6379> hsetnx users address "sxxz"
(integer) 1
127.0.0.1:6379> hsetnx users address "sxdx"
(integer) 0
127.0.0.1:6379> hsetnx users address "sxdx"
(integer) 0
  • HVALS key
1、Redis Hvals 命令返回哈希表所有域(field)的值。
2、一个包含哈希表中所有域(field)值的列表。 当 key 不存在时,返回一个空表。
127.0.0.1:6379> hvals users
1) "sxxz"
127.0.0.1:6379> exists user3
(integer) 0
127.0.0.1:6379> hvals user3
(empty list or set)
  • SCAN key
1、每次执行返回的元素数量
2、增量式命令甚至可能会返回零个元素, 但只要命令返回的游标不是 0 , 应用程序就不应该将迭代视作结束。
127.0.0.1:6379> scan 0 match user*
1) "0"
2) 1) "user2"
   2) "users"
   3) "user"
127.0.0.1:6379> scan 1 match user*
1) "0"
2) 1) "users"
   2) "user"
127.0.0.1:6379> scan 3 match user*
1) "0"
2) (empty list or set)
127.0.0.1:6379>
  • HSCAN key cursor [MATCH pattern] [COUNT count]
1、命令返回的每个元素都是一个键值对,一个键值对由一个键和一个值组成
2、用于指定对应的key下,遍历匹配上模式的字段
127.0.0.1:6379> hscan user 3 match user*
1) "0"
2) (empty list or set)
127.0.0.1:6379> hgetall user
1) "name"
2) "gzh"
3) "age"
4) "30"
5) "money"
6) "1000"
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> hset user name1 "zhangjh"
(integer) 1
127.0.0.1:6379> hscan user 0 match name
1) "0"
2) 1) "name"
   2) "gzh"
127.0.0.1:6379>