Redis基本数据类型学习之Hash

2021-07-11  本文已影响0人  漫漫Coding路

你必须非常努力,才能看起来毫不费力!

微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero !

前言

Redis Hash是 键-值 类型,值类型类似map结构,即 key-{{field1,value1},...,{fieldN,valueN}},更适合来保存对象。

比如我们要保存用户的个人信息,在String类型中,我们会把这个对象序列号为 JSON 字符串保存,这种方式方便存取而不方便更新,如果想要新增一个属性,就需要更新整个value;而使用Hash类型可以保存到属性粒度,新增和删除属性都比较方便。

image

Hash类型的命令都以H开头,下面我们来系统学习下吧!

HSET

可用版本:>= 2.0.0

时间复杂度: O(N),N为field的个数

命令格式

HSET key field value [field value ...]

命令描述

返回值

添加成功的field数量

示例

127.0.0.1:6379> hset user:1 name lifelmy age 10
(integer) 2
127.0.0.1:6379> hget user:1 name
"lifelmy"
127.0.0.1:6379> hget user:1 age
"10"

HSETNX

可用版本:>= 2.0.0

时间复杂度: O(1)

命令格式

HSETNX key field value

命令描述

返回值

示例

127.0.0.1:6379> HSETNX user:01 name lifelmy
(integer) 1
127.0.0.1:6379> HSETNX user:01 age 25
(integer) 1

# age field已经存在,不会设置
127.0.0.1:6379> HSETNX user:01 age 18
(integer) 0

127.0.0.1:6379> hget user:01 name
"lifelmy"
127.0.0.1:6379> hget user:01 age
"25"

HGET

可用版本:>= 2.0.0

时间复杂度: O(1)

命令格式

HGET key field

命令描述

key对应hash表中,返回filed对应value值。

返回值

示例

127.0.0.1:6379> hset user:01 name lifelmy
(integer) 0

# field存在
127.0.0.1:6379> hget user:01 name
"lifelmy"

# field不存在
127.0.0.1:6379> hget user:01 gender
(nil)

# key不存在
127.0.0.1:6379> hget user:02 name
(nil)

HEXISTS

可用版本:>= 2.0.0

时间复杂度: O(1)

命令格式

HEXISTS key field

命令描述

返回key对应的hash表中,filed是否存在。

返回值

示例

127.0.0.1:6379> hset stu:01 name lifelmy
(integer) 1

127.0.0.1:6379> hexists stu:01 name
(integer) 1

127.0.0.1:6379> hexists stu:01 age
(integer) 0

HDEL

可用版本:>= 2.0.0

时间复杂度: O(N),N为给定field的数量

命令格式

HDEL key field [field ...]

命令描述

返回值

示例

127.0.0.1:6379> hset mykey field1 value1
(integer) 1

# field2不存在,返回0
127.0.0.1:6379> hdel mykey field2
(integer) 0

# field1存在,返回1
127.0.0.1:6379> hdel mykey field1 field2
(integer) 1

# key不存在
127.0.0.1:6379> hdel mykey1 field1
(integer) 0

HSTRLEN

可用版本:>= 3.2.0

时间复杂度: O(1)

命令格式

HSTRLEN key field

命令描述

返回key对应的hash表中,filed对应的value长度;

返回值

示例

127.0.0.1:6379> hset user:001 name lifelmy 
(integer) 1

# name field存在
127.0.0.1:6379> hstrlen user:001 name
(integer) 7

# field不存在
127.0.0.1:6379> hstrlen user:001 age
(integer) 0

# key不存在
127.0.0.1:6379> hstrlen user:111 name
(integer) 0

HLEN

可用版本:>= 2.0.0

时间复杂度: O(1)

命令格式

HLEN key

命令描述

返回key对应的hash表中,filed的个数;

返回值

示例

127.0.0.1:6379> hset user:001 name lifelmy age 25
(integer) 2

127.0.0.1:6379> hlen user:001
(integer) 2

# key不存在
127.0.0.1:6379> hlen user:111
(integer) 0

HINCRBY

可用版本:>= 2.0.0

时间复杂度: O(1)

命令格式

HINCRBY key field increment

命令描述

返回值

示例

127.0.0.1:6379> hset user:01 cost 10
(integer) 1
127.0.0.1:6379> hincrby user:01 cost 2
(integer) 12
127.0.0.1:6379> hincrby user:01 cost -5
(integer) 7

# key不存在
127.0.0.1:6379> hincrby user:02 cost 2
(integer) 2
127.0.0.1:6379> hget user:02 cost
"2"

HINCRBYFLOAT

可用版本:>= 2.0.0

时间复杂度: O(1)

命令格式

HINCRBYFLOAT key field increment

命令描述

返回值

示例

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> HINCRBYFLOAT mykey field -5
"5.6"
127.0.0.1:6379> HSET mykey field 5.0e3
(integer) 0
127.0.0.1:6379> HINCRBYFLOAT mykey field 2.0e2
"5200"

HKEYS

可用版本:>= 2.0.0

时间复杂度: O(N),N为hash表的长度

命令格式

HKEYS key

命令描述

返回hash表中所有field

返回值

示例

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hset user:01 name zhangsan
(integer) 1
127.0.0.1:6379> hset user:01 age 18
(integer) 1
127.0.0.1:6379> hkeys user:01
1) "name"
2) "age"

HVALS

可用版本:>= 2.0.0

时间复杂度: O(N),N为hash表的长度

命令格式

HVALS key

命令描述

返回hash表中所有field对应的vlaue值

返回值

示例

127.0.0.1:6379> hset user:01 name zhangsan
(integer) 1
127.0.0.1:6379> hset user:01 age 18
(integer) 1
127.0.0.1:6379> hvals user:01
1) "zhangsan"
2) "18"

HGETALL

可用版本:>= 2.0.0

时间复杂度: O(N),N为hash表的长度

命令格式

HGETALL key

命令描述

返回hash表中所有field-vlaue值,列表形式,value值在对应field后面。

返回值

示例

127.0.0.1:6379> hset user:01 name zhangsan
(integer) 0
127.0.0.1:6379> hset user:01 age 18
(integer) 0
127.0.0.1:6379> hgetall user:01
1) "name"
2) "zhangsan"
3) "age"
4) "18"

HRANDFIELD

可用版本:>= 6.2.0

时间复杂度: O(N),N为返回的个数

命令格式

HRANDFIELD key [count [WITHVALUES]]

命令描述

返回值

示例

127.0.0.1:6379> hset user:01 name zhangsan age 18
(integer) 2

# 随机返回
127.0.0.1:6379> hrandfield user:01
"age"
127.0.0.1:6379> hrandfield user:01
"name"

# count大于hash长度
127.0.0.1:6379> hrandfield user:01 4
1) "name"
2) "age"

# count为负值
127.0.0.1:6379> hrandfield user:01 -4
1) "name"
2) "age"
3) "age"
4) "name"

# 指定withvalues参数
127.0.0.1:6379> hrandfield user:01 4 withvalues
1) "name"
2) "zhangsan"
3) "age"
4) "18"

127.0.0.1:6379> hrandfield user:01 -3  withvalues
1) "name"
2) "zhangsan"
3) "age"
4) "18"
5) "name"
6) "zhangsan"

HMSET

可用版本:>= 2.0.0

时间复杂度: O(N),N为field个数

自Redis 4.0.0,该命令已弃用,请首选HSET

命令格式

HMSET key field value [field value ...]

命令描述

返回值

示例

127.0.0.1:6379> hmset user:01 name zhangsan age 18
OK

127.0.0.1:6379> hget user:01 name
"zhangsan"

127.0.0.1:6379> hmset user:02 name lisi
OK

HMGET

可用版本:>= 2.0.0

时间复杂度: O(N),N为field个数

命令格式

HMGET key field [field ...]

命令描述

返回值

示例

127.0.0.1:6379> hset user:01 name zhangsan age 18
(integer) 2

127.0.0.1:6379> hmget user:01 name age gender
1) "zhangsan"
2) "18"
3) (nil)

HSCAN

可用版本:>= 2.8.0

时间复杂度: O(1)

命令格式

HSCAN key cursor [MATCH pattern] [COUNT count]

命令描述

返回值

返回值包含两部分:

  1. 下次遍历时,游标起始位置;如果已经遍历完成,返回 0
  2. 本次遍历结果列表

示例

127.0.0.1:6379> hset user:01 name zhangsan age 18 gender male school seu tall 180
(integer) 4

# 第一个返回值为0,表示遍历完成
127.0.0.1:6379> hscan user:01 0
1) "0"   
2)  1) "name"
    2) "zhangsan"
    3) "age"
    4) "18"
    5) "gender"
    6) "male"
    7) "school"
    8) "seu"
    9) "tall"
   10) "180"
   
# 指定正则表达式
127.0.0.1:6379> hscan user:01 0 match nam*
1) "0"
2) 1) "name"
   2) "zhangsan"

更多

个人博客: https://lifelmy.github.io/

微信公众号:漫漫Coding路

上一篇 下一篇

猜你喜欢

热点阅读