本节将对最常用的散列命令进行介绍:其中包括添加和删除键值对的命令、获取所有键值对的命令、已经对键值对的值进行自增或者自减操作的命令。阅读这一节可以让读者学习到如何将数据存储到散列里面,以及这样做的好处是什么。下表展示了一部分常用的散列命令:
命令 用例 用例描述
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检查一个键是否存在于散列中。
在接下来的一节中,我们要了解的是之后的章节会经常用到的有序集合结构。
转载请注明:XAMPP中文组官网 » Redis命令:第四节:散列