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著