2.3 针对哈希类型变量的命令

2.3.1 设置并获取哈希值

  • HSET:设置哈希值.语法:HSET key field value [field value ...].其中:

    • key:待缓存对象的键名

    • field value:以键值对形式描述的对象数据.针对同一个key,可以用多个field value对来存储数据.这里的field可以理解成对象的属性名,value可以理解为对象的属性值

    • 注:若一个key已经被定义为类型A,再使用其他类型的指令操作该key时将会报错

    • 返回值:

      • 1:表示成功设置了置顶field的值.若field之前不存在,则创建新的field并设置值

      • 0:表示字段已存在,HSET命令将更新字段的值

      • -1:表示命令执行出错或参数错误

  • HGET:读取哈希值.语法:HGET key field.其中:

    • key:待读取对象的键名

    • 如果存在key和field所对应的数据,则返回该数据,否则返回nil

例:

  • 存储一个工号为001的员工信息.其中:

    • 姓名:peter

    • 薪水:10000

    • 部门:dataTeam

127.0.0.1:6379> HSET 001 name 'peter' salary 10000 dep dataTeam
(integer) 3

可以看到,HSET命令的返回值为设置的字段数量

  • 查询该员工的姓名、薪水、部门:

127.0.0.1:6379> HGET 001 name
"peter"
127.0.0.1:6379> HGET 001 salary
"10000"
127.0.0.1:6379> HGET 001 dep
"dataTeam"
  • 查询一个不存在的key:

127.0.0.1:6379> HGET 002 name
(nil)

可以看到,返回值为nil

  • 查询一个存在的key中不存在的field:

127.0.0.1:6379> HGET 001 age
(nil)

可以看到,返回值也为nil

  • 查询哈希值时只传入key而不传入field:

127.0.0.1:6379> HGET 001
(error) ERR wrong number of arguments for 'hget' command

2.3.2 hsetnx命令

  • HSETNX

    • 语法:HSETNX key field value

    • 功能:只有当key和field所对应的value不存在时才设置value.设置成功返回1,设置失败返回0

  • 例:重新设置工号为001的员工姓名

查看当前姓名:

127.0.0.1:6379> HGET 001 name
"peter"

使用HSET命令设置姓名:

127.0.0.1:6379> HSET 001 name 'johnson'
(integer) 0
127.0.0.1:6379> HGET 001 name
"johnson"

可以看到,使用HSET命令可以更新field值

  • 例:若工号为002的员工姓名不存在,则设置员工姓名

127.0.0.1:6379> HSETNX 002 name 'tom'
(integer) 1

可以看到,此时由于key为002、field为name的值不存在,故设置成功,返回1

127.0.0.1:6379> HSETNX 002 name 'tom'
(integer) 0

可以看到,此时由于key为002、field为name的值已存在,故设置失败,返回0

注:HSETNX命令的key后边只能跟一对field value

127.0.0.1:6379> HSETNX 002 salary 9000 dep dataTeam
(error) ERR wrong number of arguments for 'hsetnx' command

2.3.3 针对key的相关操作

  • HKEYS key

    • 功能:查看key对应的哈希类型数据的所有field

  • HVALS key:

    • 功能:查看key对应的哈希类型的所有value

  • HGETALL key:

    • 功能:以field和value对的形式查看key对应的哈希类型数据

例:

  • 设置一个哈希类型的数据:

127.0.0.1:6379> HSET 010 name 'mary' salary 8000
(integer) 2
  • 查看key对应的所有field:

127.0.0.1:6379> HKEYS 010
1) "name"
2) "salary"
  • 查看key所对应的所有value:

127.0.0.1:6379> HVALS 010
1) "mary"
2) "8000"
  • 查看key所对应的field-value对:

127.0.0.1:6379> HGETALL 010
1) "name"
2) "mary"
3) "salary"
4) "8000"
  • 对一个不存在的key执行HKEYSHVALSHGETALL指令:

127.0.0.1:6379> HKEYS 00
(empty array)
127.0.0.1:6379> HVALS 00
(empty array)
127.0.0.1:6379> HGETALL 00
(empty array)

可以看到,当无法找到key时,会返回empty array

2.3.4 用hexists命令判断值是否存在

  • HEXISTS:

    • 语法:HEXISTS key field

    • 功能:判断key和field对应的value是否存在.存在返回1,反之则返回0

例:

127.0.0.1:6379> HEXISTS 010 name
(integer) 1
127.0.0.1:6379> HEXISTS 00 name
(integer) 0
127.0.0.1:6379> HEXISTS 00
(error) ERR wrong number of arguments for 'hexists' command

若调用HEXISTS命令时只写了1个参数则会报错

2.3.5 对哈希类型数据的删除操作

  • HDEL:

    • 语法:HDEL key field [field ...]

    • 功能:删除key指定的field数据.该命令可以同时删除1个key对应的多个field数据.若想删除key对应的整个哈希类型数据,则需使用DEL key命令(该命令可以对所有类型的数据使用,删除成功返回1;删除失败返回0)

例:

删除key为001所对应的哈希类型的name和salary这2个field:

127.0.0.1:6379> HDEL 001 name salary
(integer) 2

删除key对应的哈希类型中一个不存在的field:

127.0.0.1:6379> HDEL 001 gender
(integer) 0

调用HDEL指令时只填写了1个参数:

127.0.0.1:6379> HDEL 001
(error) ERR wrong number of arguments for 'hdel' command

可以看到,会报错

删除key对应的整个哈希类型数据:

127.0.0.1:6379> DEL 001
(integer) 1

查看删除的结果:

127.0.0.1:6379> HVALS 001
(empty array)

Last updated