美文网首页纵横研究院数据库技术专题社区
Redis实战-Redis五种数据类型(四-4 散列)

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

作者: 擦普洱 | 来源:发表于2019-05-09 10:59 被阅读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著

相关文章

  • Redis入门(2) - 数据类型

    Redis中的数据类型 字符串 散列 列表 集合 有序集合 Redis中的数据类型 Redis定义了这几种数据类型...

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

    4.散列  Redis的散列可以让用户将多个键值对存储到一个Redis键里面。从功能上来说,Redis为散列值提供...

  • 深入理解:Redis哈希结构内存模型剖析

    本文主要阐述 Redis中使用 最为频繁的数据类型:哈希(或称散列),在Redis内部是怎么存的。 本文内容脑图如...

  • Redis

    Redis 内容:1、Redis简介2、Redis 安装和基础管理3、Redis 数据类型4、Redis 的消息模...

  • redis缓存

    常用命令:常用数据类型redis: String: 字符串 Hash: 散列 List: 列表 Set: 集合 S...

  • redis基础知识总结

    1.Redis支持的数据类型 String: 字符串 ----> 简单动态字符串 O(1) Hash: 散列 --...

  • Redis数据类型详解

    Redis数据类型有5种:分别是字符串(string)、散列(hash)、列表(list)、集合(set)、有序集...

  • Redis的数据结构

    Redis的数据类型 对于NoSQL类型的redis具有五种数据类型,如下: 字符串string 哈希hash 列...

  • Redis整理

    1、什么是 Redis?.2、Redis 的数据类型?3、使用 Redis 有哪些好处?4、Redis 相比 Me...

  • NoSQL二--Redis

    目录 一、Redis介绍二、安装Redis三、Redis 持久化四、Redis 的数据类型五、Redis常用操作六...

网友评论

    本文标题:Redis实战-Redis五种数据类型(四-4 散列)

    本文链接:https://www.haomeiwen.com/subject/mryunqtx.html