• Redis 哈希表操作实战(全)


    目录

    HSET 添加

    HSETNX 添加

    HMSET 批量添加

    HGET 获取元素

    HGETALL 获取所有

    HMGET 批量查询

    HEXISTS 判断是否存在

    HINCRBY 增加整数

    HINCRBYFLOAT 添加浮点数

    HLEN 查Field数量

    HKEYS 查所有Field

    HVALS 查所有Field值

    HSCAN 迭代

    HDEL 删除Field


    HSET 添加

    HSET key field value:将哈希表 key 中的域 field 的值设为 value。

    • key不存在,创建新的哈希表并hset操作。
    • key存在,覆盖旧值。
    1. 127.0.0.1:6379> flushdb
    2. OK
    3. # field不存在,hset成功返回 1
    4. 127.0.0.1:6379> hset person name 'cxian'
    5. (integer) 1
    6. 127.0.0.1:6379> hset person age '22'
    7. (integer) 1
    8. # field已存在并覆盖值,hset成功返回 0
    9. 127.0.0.1:6379> hset person age '25'
    10. (integer) 0
    11. 127.0.0.1:6379> set name 100
    12. OK
    13. # 对已存在的key执行hset报错
    14. 127.0.0.1:6379> hset name high 1.75
    15. (error) WRONGTYPE Operation against a key holding the wrong kind of value

    时间复试度为O(1)。

    返回值:

    • 返回1:field不存在并值设置成功。
    • 返回0:field已存在并覆盖旧值成功。
    • 报错:key不为hash类型。

    HSETNX 添加

    HSETNX key field value:将哈希表 key 中的域 field 的值设置为 value。

    • 若field已存在,该操作无效。
    1. 127.0.0.1:6379> flushdb
    2. OK
    3. 127.0.0.1:6379> hsetnx person age 10
    4. (integer) 1
    5. # age已存在
    6. 127.0.0.1:6379> hsetnx person age 12
    7. (integer) 0

    时间复杂度O(1)。

    设置成功返回1,field已存在则操作不成功返回0。

    HMSET 批量添加

    HMSET key field value [field value ...]:同时将多个 field-value (域-值)对设置到哈希表 key 中。

    • 此命令会覆盖哈希表中已存在的域。
    • 如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。
    1. 127.0.0.1:6379> flushdb
    2. OK
    3. 127.0.0.1:6379> hmset person age 12 name cxian
    4. OK
    5. 127.0.0.1:6379> hmget person age name
    6. 1) "12"
    7. 2) "cxian"

    时间复杂度O(N),N为field-value的数量。

    执行成功返回OK,当key不是hash表类型时报错。

    HGET 获取元素

    HGET key field:返回哈希表 key 中给定域 field 的值。

    1. 127.0.0.1:6379> flushdb
    2. OK
    3. 127.0.0.1:6379> hset person age 88
    4. (integer) 1
    5. 127.0.0.1:6379> hget person age
    6. "88"
    7. # key不存在或field不存在
    8. 127.0.0.1:6379> hget person1 age
    9. (nil)
    10. 127.0.0.1:6379> hget person age1
    11. (nil)

    时间复杂度O(1)。

    返回给定域的值。

    • key不存在或field不存在,返回nil。

    HGETALL 获取所有

    HGETALL key:返回哈希表 key 中,所有的域和值。

    • 返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。
    1. 127.0.0.1:6379> flushdb
    2. OK
    3. 127.0.0.1:6379> hset person age 88
    4. (integer) 1
    5. 127.0.0.1:6379> hget person age
    6. "88"
    7. 127.0.0.1:6379> hset person name cxian
    8. (integer) 1
    9. 127.0.0.1:6379> hgetall person
    10. 1) "age" # field
    11. 2) "88" # value
    12. 3) "name"
    13. 4) "cxian"
    14. # key不存在
    15. 127.0.0.1:6379> hgetall person1
    16. (empty array)

    时间复杂度O(N),N为哈希表的大小。

    以列表形式返回哈希表的域和域的值。

    • 若key不存在返回空列表。

    HMGET 批量查询

    HMGET key field [field ...]:返回哈希表 key 中,一个或多个给定域的值。

    • 域不存在于哈希表,那么返回一个 nil 值。
    • 若key不存在,列表返回对应field数量的nil值。
    1. 127.0.0.1:6379> flushdb
    2. OK
    3. 127.0.0.1:6379> hset person age 88
    4. (integer) 1
    5. 127.0.0.1:6379> hget person age
    6. "88"
    7. 127.0.0.1:6379> hmget person age name address
    8. 1) "88"
    9. 2) "cxian"
    10. 3) (nil)
    11. # key不存在
    12. 127.0.0.1:6379> hmget person1 age name
    13. 1) (nil)
    14. 2) (nil)

    时间复杂度O(N),N为field的数量。

    返回一个包含多个给定域的关联值的表。

    • 表值的排列顺序和给定域参数的请求顺序一样。

    HEXISTS 判断是否存在

    HEXISTS key field:查看哈希表 key 中,给定域 field 是否存在。

    1. 127.0.0.1:6379> flushdb
    2. OK
    3. 127.0.0.1:6379> hset person age 88
    4. 127.0.0.1:6379> hexists person age
    5. (integer) 1
    6. # 不存在field或不存在的key
    7. 127.0.0.1:6379> hexists person age1
    8. (integer) 0
    9. 127.0.0.1:6379> hexists person1 age
    10. (integer) 0

    时间复杂度为O(1)。如果key和field都存在返回1,否则返回0。

    HINCRBY 增加整数

    HINCRBY key field increment:为哈希表 key 中的域 field 的值加上增量 increment。

    • 若increment为负数相当于相减。
    • 若key或field不存在,创建(默认值为0)并执行hincrby命令。
    • 若field对应值不为数字,则报错。
    • 本操作的值被限制在 64 位(bit)有符号数字表示之内。
    1. 127.0.0.1:6379> flushdb
    2. OK
    3. 127.0.0.1:6379> keys *
    4. (empty array)
    5. # key和field不存在
    6. 127.0.0.1:6379> hincrby person age 22
    7. (integer) 22
    8. 127.0.0.1:6379> hget person age
    9. "22"
    10. # increment为负数
    11. 127.0.0.1:6379> hincrby person age -10
    12. (integer) 12
    13. 127.0.0.1:6379> hget person age
    14. "12"
    15. 127.0.0.1:6379>
    16. 127.0.0.1:6379> hset person name cxian
    17. (integer) 1
    18. # field对应值不为数字
    19. 127.0.0.1:6379> hincrby person name 12
    20. (error) ERR hash value is not an integer

    时间复杂度O(1)。

    返回执行hincrby之后field对应的值。

    HINCRBYFLOAT 添加浮点数

    HINCRBYFLOAT key field increment

    • 与HINCRBY key field increment相似。
    • 不同点是HINCRBYFLOAT的increment必须是双精度浮点数且可以用指数符号形式表示(如2.0e7 、 3e5 、 90e-2等)。
    1. 127.0.0.1:6379> hincrbyfloat person age 23.8
    2. "35.8"
    3. 127.0.0.1:6379> hincrbyfloat person age -8.9
    4. "26.9"

    HLEN 查Field数量

    HLEN key:返回哈希表 key 中域的数量。

    1. 127.0.0.1:6379> flushdb
    2. OK
    3. 127.0.0.1:6379> keys *
    4. (empty array)
    5. 127.0.0.1:6379> hmset person age 23 name cxian
    6. OK
    7. 127.0.0.1:6379> hlen person
    8. (integer) 2

    时间复杂度O(1)。

    返回哈希表中field的数量。

    • key不存在时返回0。

    HKEYS 查所有Field

    HKEYS key:返回哈希表 key 中的所有field。

    1. 127.0.0.1:6379> flushdb
    2. OK
    3. 127.0.0.1:6379> keys *
    4. (empty array)
    5. 127.0.0.1:6379> hmset person age 23 name cxian
    6. OK
    7. 127.0.0.1:6379> hlen person
    8. (integer) 2
    9. 127.0.0.1:6379> hkeys person
    10. 1) "age"
    11. 2) "name"
    12. # key不存在
    13. 127.0.0.1:6379> hkeys person1
    14. (empty array)

    时间复杂度为O(N),N为field的数量。

    一个包含哈希表中所有域的表。

    • 当key不存在时返回空表。

    HVALS 查所有Field值

    HVALS key:返回哈希表 key 中所有域的值。

    1. 127.0.0.1:6379> flushdb
    2. OK
    3. 127.0.0.1:6379> keys *
    4. (empty array)
    5. 127.0.0.1:6379> hmset person age 23 name cxian
    6. OK
    7. 127.0.0.1:6379> hvals person
    8. 1) "23"
    9. 2) "cxian"
    10. # key不存在
    11. 127.0.0.1:6379> hvals person1
    12. (empty array)
    13. 127.0.0.1:6379>

    时间复杂度为O(N),N为field数量。

    返回一个包含哈希表中所有值的表。

    • 当key不存在时返回空表。

    HSCAN 迭代

    HSCAN key cursor [MATCH pattern] [COUNT count]:迭代哈希键中的键值对。

    HDEL 删除Field

    HDEL key field [field ...]:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

    1. 127.0.0.1:6379> hgetall person
    2. 1) "age"
    3. 2) "23"
    4. 3) "name"
    5. 4) "cxian"
    6. 127.0.0.1:6379> hdel person age
    7. (integer) 1
    8. # field不存在 或 key不存在
    9. 127.0.0.1:6379> hdel person age1
    10. (integer) 0
    11. 127.0.0.1:6379> hgetall person
    12. 1) "name"
    13. 2) "cxian"

    时间复杂度O(N),N为field的数量。

    返回被移除的field的数量。

  • 相关阅读:
    Bika LIMS 开源LIMS集—— SENAITE的安装
    c++征途 --- 类和对象 --- 多态
    virtualbox安装linux虚拟机访问互联网(外网)的方法
    SIFT算法原理
    CCF CSP 201312-3 最大的矩形 题解
    mobx基础及在react中的使用
    DB307S-ASEMI整流桥DB307S
    配置自动化部署Jenkins和Gitea
    [网鼎杯 2018]Comment git泄露 / 恢复 二次注入 .DS_Store bash_history文件查看
    【Golang】DFA算法过滤敏感词Golang实现
  • 原文地址:https://blog.csdn.net/imwucx/article/details/133076502