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

Redis数据库中hash部分

什么是哈希表

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

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

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

在Redis中的hash操作

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

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

redis中对于hash的一些指令:

关键字用法指令作用
hdelhdel key region1 region2…删除哈希表key中的一个或多个file(域)
hexistshexists key region查看哈希表key中是否有指定的域
hgethget key rekgion查询哈希表key中指定域的值
hgetallhgetall key查询哈希表key中的所有域以及对应的值
hincrbyhincrby key region num给哈希表key中指定域对应的值增加num
hincrbyfloathincrbyfloat key region num给哈希表key中指定域对应的值增加num(浮点型)
hkeyshkeys key返回哈希表key中所有的域
hlenhlen key返回哈希表key中域的数量
hmgethmget key region1 region2…返回哈希表key中指定的一个或者多个域
hmsethmset key region1 value1 …给哈希表key中一个或多个指定域进行赋值并存储
hsethset key region value给哈希表key中的指定域region赋值并保存
hsetnxhsetnx key region value给哈希表key中不存在的域region赋值并保存
hvalshvals key返回哈希表key中所有域的值
hstrlenhstrlen key region查询哈希表哦key中指定域对应的内容的字符串长度

hdel

语法:

hdel key region1 region2...

作用:

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

示例:

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)

hexists

语法:

hexists key region

作用:

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

示例:

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

hget

语法:

hget key region

作用:

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

示例:

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)

hgetall

语法:

hgetall key

作用:

查询哈希表key中所有的域以及指定的值;
当哈希表key中有值时,按照:
>>>域
>>>对应值
这种方式返回值;
如果哈希表key中没有值(即哈希表key不存在时),返回一个空列表。

示例:

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)

hincrby

语法:

hincrby key region num

作用:

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

示例:

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

hincrbyfloat

语法:

hincrbyfloat key region num

作用:

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

hkeys

语法:

hkeys key

作用:

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

示例:

# 当哈希表存在且有域时:
127.0.0.1:6379> hkeys hash1
1) "aa"
2) "bb"
3) "cc"

# 当哈希表不存在时:
127.0.0.1:6379> hkeys hash2
(empty list or set)

hlen

语法:

hlen key

作用:

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

示例:

# 当哈希表key存在且有域时:
127.0.0.1:6379> hlen hash1
(integer) 3

# 当哈希表key不存在时:
127.0.0.1:6379> hlen hash2
(integer) 0

hmget

语法:

hmget key region1 region2

作用:

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

示例:

# 当哈希表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)

hmset

语法:

hmset key region1 value1 region2 value2 ...

作用:

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

示例:

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
1) "1"
2) "2"
3) "3"

hset

语法:

hset key region value

作用:

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

示例:

# 当域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"

hsetnx

语法:

hsetnx key region value

作用:

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

示例:

当域不存在时:
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"

hvals

语法:

hvals key

作用:

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

示例:

# 当哈希表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)

hstrlen

语法:

hstrlen key region

作用:

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

示例:

# 当哈希表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
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值