• API的理解和使用——哈希类型的命令


    哈希常用的命令复习
    命令 功能
    hset key field value 设置哈希值
    hsetnx 设置哈希值,field或键必须不存在
    hget 获取某个file对应的值
    hdel 删除一个或多个field-value
    hlen 计算field的个数
    hmset 批量设置field-value
    hmget 批量获取field-value
    hexists 判断某个field是否存在
    hkeys 获取所有的field
    hvals 获取所有的value
    hgetall 获取所有的field-value
    hincrby 自增整数
    hincrbyfloat 自增浮点数
    hstrlen  计算value字符串的长度

    几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组。

    在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value={{field1,value1},...{fieldN,valueN}},

    Redis键值对和哈希类型二者的关系可以用下图来表示:

    注意:哈希类型中的映射关系叫做field-value,注意这里的value是指field对应的值,不是键对应的值,一定要注意value在不同上下文的作用。

    下面介绍一些哈希常用的命令。

    1)设置值

    命令:hset key field value

    127.0.0.1:6379> hset user:1 name kebi
    (integer) 1
    127.0.0.1:6379> hset user:1 age 26
    (integer) 1

    如果设置成功会返回1,反之会返回0。

    此外Redis提供了hsetnx命令,它们的关系就像set和setnx命令一样,只不过作用域由键变为field。

    127.0.0.1:6379> hexists user:1 name
    (integer) 1    #user:1 name存在
    127.0.0.1:6379> hsetnx user:1 name xiaoniao
    (integer) 0    #没有设置成功
    127.0.0.1:6379> hget user:1 name
    "kebi"
    127.0.0.1:6379> hsetnx user:4 name xiaoniao
    (integer) 1
    127.0.0.1:6379> hget user:4 name
    "xiaoniao"  #field不存在才行

    2)获取值

    命令:hget key field

    127.0.0.1:6379> hget user:1 name
    "kebi"
    127.0.0.1:6379> hget user:1 dorm
    (nil)

    如果键的field不存在或者或键本身就不存在,会返回nil。

    3)删除field

    命令:hdel key field [field ...]

    hdel会删除一个或多个field,返回结果为成功删除field的个数:

    127.0.0.1:6379> hkeys user:1
    1) "name"
    2) "age"
    3) "sex"
    127.0.0.1:6379> hdel user:1 name
    (integer) 1
    127.0.0.1:6379> hkeys user:1
    1) "age"
    2) "sex"

    注意如果要删除键,还是使用del:

    127.0.0.1:6379> del user:1
    (integer) 1
    127.0.0.1:6379> exists user:1
    (integer) 0

    并没有说能单独删除哈希的value,因为没有意义。

    4)计算field的个数

    命令:hlen key

    127.0.0.1:6379> hset user:1 name kebi
    (integer) 1
    127.0.0.1:6379> hset user:1 age 26
    (integer) 1
    127.0.0.1:6379> hset user:1 sex boy
    (integer) 1
    127.0.0.1:6379> hlen user:1
    (integer) 3

    5)批量设置或获取field-value

    命令:

    hmget key field [field ...]
    hmset key field value [field value ...]

    hmset和hmget分别是批量设置和获取field-value,hmset需要的参数是key和多对field-value,hmget需要的参数是key和多个field:

    127.0.0.1:6379> hmget user:1 name age sex
    1) "kebi"
    2) "26"
    3) "boy"
    127.0.0.1:6379> hmset user:2 name maoxian age 25 sex boy
    OK
    127.0.0.1:6379> hmget user:2 name age sex
    1) "maoxian"
    2) "25"
    3) "boy"

    6)判断field是否存在

    命令:hexists key field

    127.0.0.1:6379> hexists user:1 name
    (integer) 1
    127.0.0.1:6379> hexists user:1 dorm
    (integer) 0

    如果field存在,返回结果为1,如果不存在返回0.

    7)获取所有的field

    命令:hkeys key

    hkeys命令应该叫hfields更为恰当,它返回指定哈希键所有的field:

    127.0.0.1:6379> keys *  #返回所有的键
    1) "user:2"
    2) "user:1"
    127.0.0.1:6379> hkeys user:1 #返回键user:1所有的field
    1) "name"
    2) "age"
    3) "sex"
    127.0.0.1:6379> hkeys user:2
    1) "name"
    2) "age"
    3) "sex"

    8)获取所有value

    命令:hvals key

    127.0.0.1:6379> hvals user:1
    1) "kebi"
    2) "26"
    3) "boy"
    127.0.0.1:6379> hvals user:2
    1) "maoxian"
    2) "25"
    3) "boy"

    9)获取所有的field-value

    命令:hgetall key

    127.0.0.1:6379> hgetall user:1
    1) "name"
    2) "kebi"
    3) "age"
    4) "26"
    5) "sex"
    6) "boy"

    注意:在使用hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。

      如果只需要获取部分field,可以使用hmget,如果一定要回去全部的field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型。

    10)hincrby hincrbyfloat

    命令:

    hincrby key field
    hincrbyfloat key field

    hincrby和hincrbyfloat命令一样,但是它们的作用域是field。

    11)计算value的字符长度(需要Redis3.2版本以上)

    命令:hstrlen key field

    下面提供一张哈希类型命令的时间复杂度,可以根据自身的需求选择合适的命令。

    哈希类型命令的时间复杂度
    命令                             时间复杂度
    hset key field value O(1)
    hget key field O(1)
    hdel key field [field ...] O(k),k是field个数
    hlen key O(1)
    hgetall key O(n),n是field总数
    hmget field [field ...] O(k),k是field个数
    hmset field value [field value...] O(k),k是field个数
    hexists key field O(1)
    hkeys key O(n),n是field总数
    hvals key O(n),n是field总数
    hsetnx key field value O(1)
    hincrby key field increment O(1)
    hincrbyfloat key field increment  O(1)
    hstrlen key field O(1)
  • 相关阅读:
    [LeetCode] 374. Guess Number Higher or Lower
    [LeetCode] 35. Search Insert Position
    [LeetCode] 205. Isomorphic Strings
    [LeetCode] 87. Scramble String
    [LeetCode] 274. H-Index
    [LeetCode] 507. Perfect Number
    [LeetCode] 88. Merge Sorted Array
    [LeetCode] 283. Move Zeroes
    [LeetCode] 287. Find the Duplicate Number
    [LeetCode] 204. Count Primes
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/8046984.html
Copyright © 2020-2023  润新知