纵横研究院数据库技术专题社区

Redis实战-Redis五种数据类型(四-4 散列)

2019-05-09  本文已影响7人  擦普洱

4.散列
  Redis的散列可以让用户将多个键值对存储到一个Redis键里面。从功能上来说,Redis为散列值提供了一些与字符串值相同的特性,使得散列非常适用于将一些相关的数据存储在一起。我们可以把这种数据聚集看做是关系数据库中的行,或者文档数据库中的文档。
  本节将对最常用的散列命令进行介绍:其中包括添加和删除键值对的命令、获取所有键值对的命令,以及对键值对的值进行自增或者自减操作的命令。

用于添加和删除键值对的散列操作
命令 用例和描述
HMGET HMGET key-name key [key . . .] --从散列里面获取一个或多个键设置值
HMSET HMSET key-name value [key value . . . ] --为散列里面的一个或多个键设置值
HDEL HDEL key-name key [key . . . ] --删除散列里面的一个或多个键值对,返回成功找到并删除的键值对数量
HLEN HLEN key-name -- 返回散列包含的键值对数量

使用上述命令示例:

# 使用HMSET命令可以将键值对添加到散列里面
127.0.0.1:6379> hmset hash-key field "foo"
OK
# 使用HMGET命令可以获取散列键的值
127.0.0.1:6379> hmget hash-key field
1) "foo"
# HLEN显示当前散列的长度
127.0.0.1:6379> hlen hash-key
(integer) 1
# HDElL 命令在成功删除键值对的时候,返回当前删除的长度
127.0.0.1:6379> hdel hash-key field
(integer) 1
127.0.0.1:6379>

注意:HGET命令和HSET命令分别是HMGET命令和HMSET命令的单参数版本,这些命令的唯一区别在于单参数版本每次执行只能处理一个键值对,而多参数版本每次执行可以处理多个键值对。

# 一次设置多个域
127.0.0.1:6379> HMSET pet dog "doudou" cat "nounou"
OK
# 返回值的顺序和传入参数的顺序一样,不存在的域返回nil值
127.0.0.1:6379> HMGET pet dog cat fake_pet
1) "doudou"
2) "nounou"
3) (nil)
127.0.0.1:6379>

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

展示Redis散列的更高级特性
命令 用例和描述
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

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

示例:

#  设置多个键值对
127.0.0.1:6379> hmset hash-key2 short 'hello' long 1000*'1'
OK
# 在考察散列的时候,我们可以只取出散列包含的键,避免传输体积较大的值
127.0.0.1:6379> hkeys hash-key2
1) "short"
2) "long"
# 检查给定的键是否存在于散列中
127.0.0.1:6379> hexists hash-key2 num
(integer) 0
# 和字符串一样,对散列中一个尚未存在的键执行自增操作时,Redis会将键的值当做0来处理
127.0.0.1:6379> hincrby hash-key2 num 1
(integer) 1
127.0.0.1:6379> hexists hash-key2 num
(integer) 1
127.0.0.1:6379>

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

不怕从零开始,只怕从未启程!

参考文献:
菜鸟教程:https://www.runoob.com/redis/redis-keys.html
《Redis实战》Josiah L. Carlson著

上一篇 下一篇

猜你喜欢

热点阅读