REDIS Hash

REDIS Hash

HDEL

  • 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    # 测试数据

    redis> HGETALL abbr
    1) "a"
    2) "apple"
    3) "b"
    4) "banana"
    5) "c"
    6) "cat"
    7) "d"
    8) "dog"


    # 删除单个域

    redis> HDEL abbr a
    (integer) 1


    # 删除不存在的域

    redis> HDEL abbr not-exists-field
    (integer) 0


    # 删除多个域

    redis> HDEL abbr b c
    (integer) 2

    redis> HGETALL abbr
    1) "d"
    2) "dog"

HEXISTS

  • 查看哈希表 key 中,给定域 field 是否存在
    1
    2
    3
    4
    5
    6
    127.0.0.1:6379> HEXISTS phone myphone
    (integer) 0
    127.0.0.1:6379> HSET phone myphone nokia-1110
    (integer) 1
    127.0.0.1:6379> HEXISTS phone myphone
    (integer) 1

HGET

  • 返回哈希表 key 中给定域 field 的值
    1
    2
    3
    4
    5
    6
    7
    8
    #存在
    127.0.0.1:6379> HSET site redis redis.com
    (integer) 1
    127.0.0.1:6379> HGET site redis
    "redis.com"
    #不存在
    127.0.0.1:6379> HGET site mysql
    (nil)

HGETALL

  • 返回哈希表 key 中,所有的域和值
  • 在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    127.0.0.1:6379> HSET people jack "Jack Sparrow"
    (integer) 1
    127.0.0.1:6379> HSET people gump "Forrest Gump"
    (integer) 1
    127.0.0.1:6379> HGETALL people
    1) "jack"
    2) "Jack Sparrow"
    3) "gump"
    4) "Forrest Gump"

HINCRBY

  • 为哈希表 key 中的域 field 的值加上增量 increment
  • 增量也可以为负数,相当于对给定域进行减法操作
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    # increment 为正数
    127.0.0.1:6379> HEXISTS counter page_view # 对空域进行设置
    (integer) 0
    127.0.0.1:6379> HINCRBY counter page_view 200
    (integer) 200
    127.0.0.1:6379> HINCRBY counter page_view 200
    (integer) 400
    127.0.0.1:6379> HINCRBY counter page_view
    (error) ERR wrong number of arguments for 'hincrby' command
    127.0.0.1:6379> HGET counter page_view
    "400"
    # increment 为负数
    127.0.0.1:6379> HGET counter page_view
    "400"
    127.0.0.1:6379> HINCRBY counter page_view -50
    (integer) 350
    127.0.0.1:6379> HGET counter page_view
    "350"
    # 尝试对字符串值的域执行HINCRBY命令
    127.0.0.1:6379> HSET myhash string hello,world # 设定一个字符串值
    (integer) 1
    127.0.0.1:6379> HGET myhash string
    "hello,world"
    127.0.0.1:6379> HINCRBY myhash string 1 # 命令执行失败,错误
    (error) ERR hash value is not an integer
    127.0.0.1:6379> HGET myhash string # 原值不变
    "hello,world"

HINCRBYFLOAT

  • 为哈希表 key 中的域 field 加上浮点数增量 increment
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # 值和增量都是普通小数
    127.0.0.1:6379> HSET mykey field 10.50
    (integer) 1
    127.0.0.1:6379> HINCRBYFLOAT mykey field 0.1
    "10.6"
    # 值和增量都是指数符号
    127.0.0.1:6379> HSET mykey field 5.0e3
    (integer) 0
    127.0.0.1:6379> HINCRBYFLOAT mykey field 2.0e2
    "5200"
    127.0.0.1:6379> EXISTS price
    (integer) 0
    # 对不存在的键执行 HINCRBYFLOAT
    127.0.0.1:6379> HINCRBYFLOAT price milk 3.5
    "3.5"
    127.0.0.1:6379> HGETALL price
    1) "milk"
    2) "3.5"
    # 对不存在的域进行 HINCRBYFLOAT
    127.0.0.1:6379> HGETALL price
    1) "milk"
    2) "3.5"
    127.0.0.1:6379> HINCRBYFLOAT price coffee 4.5 # 新增 coffee 域
    "4.5"
    127.0.0.1:6379> HGETALL price
    1) "milk"
    2) "3.5"
    3) "coffee"
    4) "4.5"

HKEYS

  • 返回哈希表 key 中的所有域
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 哈希表非空
    127.0.0.1:6379> HMSET website google www.google.com yahoo www.yahoo.com
    OK
    # 空哈希表/key不存在
    127.0.0.1:6379> HKEYS website
    1) "google"
    2) "yahoo"
    127.0.0.1:6379> EXISTS fake_key
    (integer) 0
    127.0.0.1:6379> HKEYS fake_key
    (empty list or set)

HLEN

  • 返回哈希表 key 中域的数量
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    127.0.0.1:6379> HSET db redis redis.com
    (integer) 1
    127.0.0.1:6379> HSET db mysql mysql.com
    (integer) 1
    127.0.0.1:6379> HLEN db
    (integer) 2
    127.0.0.1:6379> HSET db mongodb mongodb.org
    (integer) 1
    127.0.0.1:6379> HLEN db
    (integer) 3

HMGET

  • 返回哈希表 key 中,一个或多个给定域的值
    1
    2
    3
    4
    5
    6
    127.0.0.1:6379> HMSET pet dog "doudou" cat "nounou"
    OK
    127.0.0.1:6379> HMGET pet dog cat fake_pet
    1) "doudou"
    2) "nounou"
    3) (nil)

HMSET

  • 同时将多个 field-value (域-值)对设置到哈希表 key 中
  • 此命令会覆盖哈希表中已存在的域。
  • 如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作
    1
    2
    3
    4
    5
    6
    127.0.0.1:6379> HMSET website google www.google.com yahoo www.yahoo.com
    OK
    127.0.0.1:6379> HGET website google
    "www.google.com"
    127.0.0.1:6379> HGET website yahoo
    "www.yahoo.com"

HSET

  • 将哈希表 key 中的域 field 的值设为 value
  • 如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作
  • 如果域 field 已经存在于哈希表中,旧值将被覆盖
    1
    2
    3
    4
    127.0.0.1:6379> HSET website google "www.g.cn"  # 设置一个新域
    (integer) 1
    127.0.0.1:6379> HSET website google "www.google.com" # 覆盖一个旧域
    (integer) 0

HSETNX

  • 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在
  • 若域 field 已经存在,该操作无效
  • 如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令
    1
    2
    3
    4
    5
    redis> HSETNX nosql key-value-store redis
    (integer) 1

    redis> HSETNX nosql key-value-store redis # 操作无效,域 key-value-store 已存在
    (integer) 0

HVALS

  • 返回哈希表 key 中所有域的值
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 非空哈希表
    127.0.0.1:6379> HMSET website google www.google.com yahoo www.yahoo.com
    OK
    127.0.0.1:6379> HVALS website
    1) "www.google.com"
    2) "www.yahoo.com"
    # 空哈希表/不存在的key
    127.0.0.1:6379> EXISTS not_exists
    (integer) 0
    127.0.0.1:6379> HVALS not_exists
    (empty list or set)