7.redis 数据类型之hash 哈希

redis 数据类型之hash 哈希

哈希简介

hash 是一个string 类型的field和value的映射表,hash特别适合用于存储对象。redis中每个hash可以存储2^32 -1 个键值对(40多亿)。

Hash 命令集合

hset

HSET key field value

hset 命令用于为哈希表中字段赋值。如果哈希表不存在,一个新的哈希表被创建并进行hset操作。

如果字段已经存在于哈希表中,旧值将被覆盖。

1
2
127.0.0.1:6379> hset stu1 name zhangsan
(integer) 1

hmset

HMSET key field1 value1 [field2 value2]

hmset 命令用于同时将多个field-value(字段-值)对设置到哈希表中。此命令会覆盖哈希表中已经存在的字段。如果哈希表不存在,会创建一个空的哈希表,并执行hmset命令操作。

1
2
127.0.0.1:6379> hmset stu1 name ooyhao age 23 sex male
OK

hsetnx

HSETNX key field value

hsetnx 命令用于为哈希表中不存在的字段赋值。如果哈希表不存在,一个新的哈希表被创建并进行hset操作。

  • 如果字段已经存在于哈希表中,则操作无效。
  • 如果key不存在,一个新的哈希表被创建并执行hsetnx命令。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
127.0.0.1:6379> hgetall stu1
1) "name"
2) "ooyhao"
3) "age"
4) "18"
5) "sex"
6) "female"
127.0.0.1:6379> hsetnx stu1 name ouYang
(integer) 0
127.0.0.1:6379> hsetnx stu1 salary 7500
(integer) 1
127.0.0.1:6379> hgetall stu1
1) "name"
2) "ooyhao"
3) "age"
4) "18"
5) "sex"
6) "female"
7) "salary"
8) "7500"

hget

HGET key field

hget 命令用于返回哈希表中执行字段的值。

1
2
3
4
5
6
7
8
127.0.0.1:6379> hmset stu1 name ooyhao age 23 sex male
OK
127.0.0.1:6379> hget stu1 name
"ooyhao"
127.0.0.1:6379> hget stu1 age
"23"
127.0.0.1:6379> hget stu1 sex
"male"

hmget

HMGET key field1 [field2]

hmget 命令用于返回哈希表中,一个或多个给定字段的值。如果指定的字段不存在与哈希表中,则返回一个nil值。

1
2
3
4
127.0.0.1:6379> hmget stu1 name age salary
1) "ooyhao"
2) "23"
3) (nil)

hgetall

HGETALL key

hgetall 命令用于返回哈希表中,所有的字段和值。在返回值中,紧跟着每个字段名(field name)之后的是字段的值(value).左右返回值的长度是哈希表大小的两倍。

1
2
3
4
5
6
7
127.0.0.1:6379> hgetall stu1
1) "name"
2) "ooyhao"
3) "age"
4) "23"
5) "sex"
6) "male"

hdel

HDEL key field1 [field2]

hdel 命令用于删除指定哈希表中的一个或多个字段。不存在的字段将被忽略。

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> hkeys stu1
1) "name"
2) "age"
3) "sex"
4) "salary"
127.0.0.1:6379> hdel stu1 sex salary
(integer) 2
127.0.0.1:6379> hkeys stu1
1) "name"
2) "age"

hincrby

HINCRBY key field increment

hincrby 命令用于为哈希表中的字段值加上指定的增量值。增量也可以是负数,相当于对指定字段进行减法操作。

  • 如果哈希表的key不存在,一个新的哈希表被创建并执行hincrby操作。

  • 如果指定的字段不存在,那么在执行命令前,字段的值被初始化为0.

对一个存储字符串值的字段执行hincrby 命令将造成一个错误,本操作的值被限制在64位(bit)有符号数字表示之内。

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> hincrby stu1 age 1
(integer) 19
127.0.0.1:6379> hincrby stu1 age 1
(integer) 20
127.0.0.1:6379> hincrby stu1 age -1
(integer) 19
127.0.0.1:6379> hincrby stu1 age -2
(integer) 17
127.0.0.1:6379> hincrby stu1 name 1
(error) ERR hash value is not an integer

hincrbyfloat

HINCRBYFLOAT key field increment

hincrbyfloat 命令用于为哈希表中的字段值加上浮点数增量值。如果指定的字段不存在,那么在执行命令前,该字段会被初始化为0.

1
2
3
4
5
6
7
8
127.0.0.1:6379> hkeys stu1
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> hincrbyfloat stu1 salary 10.5
"10.5"
127.0.0.1:6379> hincrbyfloat stu1 salary 1
"11.5"

hexists

HEXISTS key field

hexists 命令用于查看哈希表中的指定字段是否存在。

1
2
3
4
5
6
127.0.0.1:6379> hdel stu1 salary
(integer) 1
127.0.0.1:6379> hexists stu1 name
(integer) 1
127.0.0.1:6379> hexists stu1 salary
(integer) 0

hlen

HLEN key

hlen 命令用于获取哈希表中字段的数量。

1
2
127.0.0.1:6379> hlen stu1
(integer) 3

hkeys

HKEYS key

hkeys 命令用于获取哈希表中的所有域(field).

1
2
3
4
127.0.0.1:6379> hkeys stu1
1) "name"
2) "age"
3) "sex"

hvals

HVALS key

hvals 命令返回哈希表所有的字段的值。

1
2
3
4
127.0.0.1:6379> hvals stu1
1) "ooyhao"
2) "23"
3) "male"

本文参考自菜鸟教程:https://www.runoob.com/redis/redis-hashes.html

更多请移步官网

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×