Redis数据库的安装和使用(三)-哈希表相关指令

Redis数据库中hash部分

什么是哈希表

首先,先了解一下哈希表,相对于对于列表(list)的了解,哈希表就比较陌生了,哈希表在百度词典中的定义为:

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

因为本身接触哈希也是比较少,所以,只能是很浅地了解一下哈希表的原理;
简单来讲,哈希表与python结合来理解就是,表现很像列表,但是内部却是以字典的形式,即类似于键值对的形式,但是哈希是以唯一索引的形式去存储数据,这样可以节约查询的时间,但是缺陷是比较占内存,可以说是用空间来换时间了。
1
2
3
4
在Redis中的hash操作

在redis中,hash的一些简单个人理解:

首先,在redis中,创建时,hash以键key中有多个索引region(域),每个索引对应唯一值value的形式进行存储,在对hash进行操作时,大多是对key中存储的region进行操作,也可直接对key进行操作。
1
redis中对于hash的一些指令:

关键字 用法 指令作用
hdel hdel key region1 region2… 删除哈希表key中的一个或多个file(域)
hexists hexists key region 查看哈希表key中是否有指定的域
hget hget key rekgion 查询哈希表key中指定域的值
hgetall hgetall key 查询哈希表key中的所有域以及对应的值
hincrby hincrby key region num 给哈希表key中指定域对应的值增加num
hincrbyfloat hincrbyfloat key region num 给哈希表key中指定域对应的值增加num(浮点型)
hkeys hkeys key 返回哈希表key中所有的域
hlen hlen key 返回哈希表key中域的数量
hmget hmget key region1 region2… 返回哈希表key中指定的一个或者多个域
hmset hmset key region1 value1 … 给哈希表key中一个或多个指定域进行赋值并存储
hset hset key region value 给哈希表key中的指定域region赋值并保存
hsetnx hsetnx key region value 给哈希表key中不存在的域region赋值并保存
hvals hvals key 返回哈希表key中所有域的值
hstrlen hstrlen key region 查询哈希表哦key中指定域对应的内容的字符串长度
hdel

语法:

hdel key region1 region2…
1
作用:

删除哈希表key中一个或多个region域,如果redion域不存在,则会自动忽略,删除下一个,知道全部删除。
1
示例:

127.0.0.1:6379> hset hash1 aa 11
(integer) 1
127.0.0.1:6379> hset hash1 bb 11
(integer) 1
127.0.0.1:6379> hset hash1 cc 11
(integer) 1

删除不存在的域

127.0.0.1:6379> hdel hash dd
(integer) 0

删除一个域

127.0.0.1:6379> hdel hash1 cc
(integer) 1

删除多个域

127.0.0.1:6379> hdel hash1 aa bb
(integer) 2
127.0.0.1:6379> keys *
(empty list or set)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hexists

语法:

hexists key region
1
作用:

查看哈希表key中是否有指定的region域;
如果指定域region存在,则返回1;
如果指定域region不存在,则返回0。
1
2
3
示例:

127.0.0.1:6379> hset hash1 aa 11
(integer) 1

查询的域存在时:

127.0.0.1:6379> hexists hash1 aa
(integer) 1

查询的域不存在时:

127.0.0.1:6379> hexists hash1 bb
(integer) 0
1
2
3
4
5
6
7
8
9
10
hget

语法:

hget key region
1
作用:

查询哈希表key中指定域region对应的值;
如果指定域region存在,则返回对应的值;
如果指定域region不存在,则返回nil。
1
2
3
示例:

127.0.0.1:6379> hset hash1 aa 11
(integer) 1

当指定域region存在时:

127.0.0.1:6379> hget hash1 aa
“11”

当指定域region不存在时:

127.0.0.1:6379> hget hash1 bb
(nil)
1
2
3
4
5
6
7
8
9
10
hgetall

语法:

hgetall key
1
作用:

查询哈希表key中所有的域以及指定的值;
当哈希表key中有值时,按照:


对应值
这种方式返回值;
如果哈希表key中没有值(即哈希表key不存在时),返回一个空列表。
1
2
3
4
5
6
示例:

127.0.0.1:6379> hset hash1 aa 11
(integer) 1
127.0.0.1:6379> hset hash1 bb 22
(integer) 1

当哈希表key存在且有值时:

127.0.0.1:6379> hgetall hash1

  1. “aa”
  2. “11”
  3. “bb”
  4. “22”

当哈希表key不存在时:

127.0.0.1:6379> hgetall hash2
(empty list or set)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
hincrby

语法:

hincrby key region num
1
作用:

向哈希表key指定域region的值进行增加num运算;
当指定域region对应的值不为数字时,会报错;
当指定域region对应的值为数字时,进行增加num运算,其中num可以为负数,相当于减法运算;
当指定域region不存在时,会先进行初始化值为0,再进行运算。
1
2
3
4
示例:

127.0.0.1:6379> hgetall hash1

  1. “aa”
  2. “11”
  3. “bb”
  4. “abc”

指定域region对应的值不为数字时:

127.0.0.1:6379> hincrby hash1 bb 10
(error) ERR hash value is not an integer

指定域region对应的值存在且为数字时:

127.0.0.1:6379> hincrby hash1 aa 10
(integer) 21

指定域region不存在时:

127.0.0.1:6379> hincrby hash1 cc -10
(integer) -10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
hincrbyfloat

语法:

hincrbyfloat key region num
1
作用:

与hincrby相似,只是其中的num值为浮点型数字,其余相同,具体作用见hincrby。
1
hkeys

语法:

hkeys key
1
作用:

当哈希表存在且有域时,返回哈希表key中所有的域;
当哈希表不存在时,返回空列表。
1
2
示例:

当哈希表存在且有域时:

127.0.0.1:6379> hkeys hash1

  1. “aa”
  2. “bb”
  3. “cc”

当哈希表不存在时:

127.0.0.1:6379> hkeys hash2
(empty list or set)
1
2
3
4
5
6
7
8
9
hlen

语法:

hlen key
1
作用:

当哈希表key存在且有域时,返回key中域的数量;
当哈希表key不存在时,返回0。
1
2
示例:

当哈希表key存在且有域时:

127.0.0.1:6379> hlen hash1
(integer) 3

当哈希表key不存在时:

127.0.0.1:6379> hlen hash2
(integer) 0
1
2
3
4
5
6
7
hmget

语法:

hmget key region1 region2
1
作用:

返回哈希表key中指定的一个或者多个域;
当指定域不存在时,返回nil;
当哈希表key不存在时,返回查询域个数nil的表。
1
2
3
示例:

当哈希表key存在且所查询的域都存在时:

127.0.0.1:6379> hmget hash1 aa bb cc

  1. “21”
  2. “abc”
  3. “-10”

当哈希表key存在,但所查询的域有不存在的时候:

127.0.0.1:6379> hmget hash1 aa bb dd

  1. “21”
  2. “abc”
  3. (nil)

当哈希表key不存在时:

127.0.0.1:6379> hmget hash2 aa bb cc

  1. (nil)
  2. (nil)
  3. (nil)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    hmset

语法:

hmset key region1 value1 region2 value2 …
1
作用:

给哈希表key中的一个或多个域进行赋值并保存到表中;
当域存在时,会覆盖之前的值;
当哈希表key不存在时,会创建一个空的哈希表并执行后面的赋值与保存。
1
2
3
示例:

127.0.0.1:6379> hmget hash1 aa bb cc

  1. “21”
  2. “abc”
  3. “-10”

当哈希表key存在时:

127.0.0.1:6379> hmset hash1 cc 100 dd abcd ee 20
OK
127.0.0.1:6379> hmget hash1 aa bb cc dd ee

  1. “21”
  2. “abc”
  3. “100”
  4. “abcd”
  5. “20”

当哈希表key不存在时:

127.0.0.1:6379> keys *

  1. “hash1”
    127.0.0.1:6379> hmset hash2 a 1 b 2 c 3
    OK
    127.0.0.1:6379> hmget hash2 a b c
  2. “1”
  3. “2”
  4. “3”
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    hset

语法:

hset key region value
1
作用:

给哈希表key指定域region赋值并保存;
如果域region存在,则会将之前的值覆盖;
如果域region不存在,则会创建一个新的域region并赋值。
1
2
3
示例:

当域region存在时:

127.0.0.1:6379> hget hash1 aa
“21”
127.0.0.1:6379> hset hash1 aa 999
(integer) 0
127.0.0.1:6379> hget hash1 aa
“999”

当域region不存在时:

127.0.0.1:6379> hget hash1 ff
(nil)
127.0.0.1:6379> hset hash1 ff 10
(integer) 1
127.0.0.1:6379> hget hash1 ff
“10”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
hsetnx

语法:

hsetnx key region value
1
作用:

给哈希表key中不存在的域region赋值并保存;
当域region存在时,操作无效;
当哈希表key不存在时,会创建新的哈希表key,并将域保存到表中。
1
2
3
示例:

当域不存在时:
127.0.0.1:6379> hget hash2 d
(nil)
127.0.0.1:6379> hsetnx hash2 d 999
(integer) 1
127.0.0.1:6379> hget hash2 d
“999”

当域存在时:
127.0.0.1:6379> hget hash2 a
“1”
127.0.0.1:6379> hsetnx hash2 a 999
(integer) 0
127.0.0.1:6379> hget hash2 a
“1”

当哈希表key不存在时:

127.0.0.1:6379> keys *

  1. “hash2”
  2. “hash1”
    127.0.0.1:6379> hsetnx hash3 aaa 123
    (integer) 1
    127.0.0.1:6379> hget hash3 aaa
    “123”
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    hvals

语法:

hvals key
1
作用:

返回哈希表key中所有域的值;
当key不存在时,返回一个空的表。
1
2
示例:

当哈希表key存在时:

127.0.0.1:6379> hvals hash1

  1. “999”
  2. “abc”
  3. “100”
  4. “abcd”
  5. “20”
  6. “10”

当哈希表key不存在时:

127.0.0.1:6379> hvals hash4
(empty list or set)
1
2
3
4
5
6
7
8
9
10
11
12
hstrlen

语法:

hstrlen key region
1
作用:

返回哈希表key指定域region对应的值的字符串的长度;
如果哈希表key或者指定域region不存在时,返回0。
1
2
示例:

当哈希表key存在且指定域region有值时:

127.0.0.1:6379> hset hash1 111 abcd123
(integer) 1
127.0.0.1:6379> hstrlen hash1 111
(integer) 7

当哈希表存在,但指定域不存在时:

127.0.0.1:6379> hstrlen hash1 112
(integer) 0

当哈希表不存在时:

127.0.0.1:6379> hstrlen hash2 111
(integer) 0

作者:褐瑟俗
来源:CSDN
原文:https://blog.csdn.net/weixin_43327425/article/details/85709000
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/weixin_43642131/article/details/86062964
今日推荐