资讯专栏INFORMATION COLUMN

Python--Redis实战:第三章:Redis命令:第四节:散列

waterc / 2480人阅读

摘要:实例导入包包与本地进行链接,地址为,端口号为和字符串一样,对散列中一个尚未存在的键执行自增操作时,会将键的值当作来处理。

上一篇文章:Python--Redis实战:第三章:Redis命令:第三节:集合
下一篇文章:Python--Redis实战:第三章:Redis命令:第五节:有序集合

第一章提到过,Redis的散列可以让用户将多个键值对存储到一个Redis里面。从功能上来说,Redis为散列值提供了一些与字符串值相同的特性,使得散列非常适用于将一些相关的数据存储在一起。我们可以把这种数据聚集看做是关系数据库的行,或者文档数据库的文档。

本节将对最常用的散列命令进行介绍:其中包括添加和删除键值对的命令、获取所有键值对的命令、已经对键值对的值进行自增或者自减操作的命令。阅读这一节可以让读者学习到如何将数据存储到散列里面,以及这样做的好处是什么。下表展示了一部分常用的散列命令:

命令 用例 用例描述
hmget hmget key-name key [key ...] 从散列里面获取一个或多个键的值
hmset hmset key-name key value [key value ...] 为散列里面的一个或多个键设置值
hdel hdel key-name key [key ...] 删除散列里面的一个或多个键值对,返回成功找到并删除的键值对数量。
hlen hlen key-name 返回散列包含的键值对数量。

hdel命令已经在第一章中介绍过了,而hlen命令以及用于一次读取或者设置多个键的hmget和hmset则是新出现的命令。像hmget和hmset这种批量处理多个键的命令既可以给用户带来方便,又可以通过减少命令的调用次数以及客户端与Redis之前的通信往返次数来提升Redis的性能。

示例:

import redis # 导入redis包包

# 与本地redis进行链接,地址为:localhost,端口号为6379
r = redis.StrictRedis(host="localhost", port=6379)


values = {"k1": "v1", "k2": "v2", "k3": "v3"}
#使用hmset命令可以一次将多个键值对添加多散列里面
print(r.hmset("hash-key", values))

keys = ["k2", "k3"]
#使用hmset命令可以一次获取多个键的值
print(r.hmget("hash-key", keys))


print(r.hlen("hash-key"))

print(r.hdel("hash-key","k1","k3"))

结果:

True
[b"v2", b"v3"]
4
2

第一章介绍的hget命令和hset命令分别是hmget命令和hmset命令的单参数版本,这里的命令的唯一区别在于单参数版本每次执行只能处理一个键值对,而多参数版本的每次执行可以处理多个键值对。

下表列出了散列的其他几个批量操作命令,以及一些和字符串操作类似的散列命令。

命令 用例 用例描述
hexists hexists key-name key 检查给定键是否存在于散列中
hkeys hkeys key-name 获取散列包含的所有键
hvals hvals key-name 获取散列包含的所有值
hgetall hgetall key-name 获取散列包含的所有键值对
hincrby hincrby key-name key increment 将键key存储的值加上整数increment
hincrbyfloat hincrbyfloat key-name key increment 将键key存储的值加上浮点数increment

尽管有hgetall存在,但hkeys和hvals也是非常有用的:如果散列包含的值非常大,那么用户可以先使用hkeys取出散列包含的所有键,然后再使用hget一个接一个地取出键的值,从而避免因为一次获取多个大体积的值而导致服务器阻塞。

hincrby和hincrbyfloat可能会让读者回想起用于处理字符串的incrby和incrbyfloat,这两个命令拥有相同的语义,他们的不同在于hincrby和hincrbyfloat处理的是散列,而不是字符串。

实例:

import redis # 导入redis包包


# 与本地redis进行链接,地址为:localhost,端口号为6379
r = redis.StrictRedis(host="localhost", port=6379)

r.delete("hash-key2")

print(r.hmset("hash-key2",{"short:":"hello","long":1000*"1"}))

print(r.hkeys("hash-key2"))

print(r.hexists("hash-key2","num"))

#和字符串一样,对散列中一个尚未存在的键执行自增操作时,Redis会将键的值当作0来处理。
print(r.hincrby("hash-key2","num"))

print(r.hexists("hash-key2","num"))

结果:

True
[b"short:", b"long"]
False
1
True

正如前面所说,在对散列进行处理的时候,如果键值对的值的体积非常庞大,那么用户可以先使用hkeys获取散列的所有键,然后通过只获取必要的值来减少需要传输的数据量。除此之外,用户还可以像使用sismemeber检查一个元素是否存在于集合里面一样,使用hexists检查一个键是否存在于散列中。

在接下来的一节中,我们要了解的是之后的章节会经常用到的有序集合结构。

上一篇文章:Python--Redis实战:第三章:Redis命令:第三节:集合
下一篇文章:Python--Redis实战:第三章:Redis命令:第五节:有序集合

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44873.html

相关文章

  • Python--Redis实战三章Redis命令第三节:集合

    摘要:上一篇文章实战第三章命令第二节列表下一篇文章实战第三章命令第四节散列 上一篇文章:Python--Redis实战:第三章:Redis命令:第二节:列表下一篇文章:Python--Redis实战:第三章:Redis命令:第四节:散列 Redis的集合以无序的方式来存储多个各不相同的元素,用户可以快速地对集合执行添加元素操作、移除元素操作、以及检查一个元素是否存在于集合里。本节将对最常用...

    HollisChuang 评论0 收藏0
  • Python--Redis实战三章Redis命令:第五节:有序集合

    摘要:对给定的有序集合执行类似于集合的并集运算。用户可以把集合作为输入传给和,命令会将集合看作是成员分值全为的有序集合来处理。上一篇文章实战第三章命令第四节散列下一篇文章实战第三章命令第六节发布与订阅 上一篇文章:Python--Redis实战:第三章:Redis命令:第四节:散列下一篇文章:Python--Redis实战:第三章:Redis命令:第六节:发布与订阅 和散列存储着键与值之间...

    xinhaip 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<