`
足至迹留
  • 浏览: 494757 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

<redis-4> 3.2 redis数据类型之hash

阅读更多
3.3 散列类型
3.3.1 介绍
Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能嵌套其他的数据类型。一个散列类型键可以包含至多2^32-1个字段。
提示:
除了散列类型,Redis的其他数据类型同样不支持数据类型嵌套。比如集合类型的每个元素都只能是字符串,不能是另一个集合或散列表等。

散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。例如要存储ID为2的汽车对象,可以分别使用名为color、name和price的3个字段来存储该辆汽车的颜色、名称和价格。存储结构如图3-5所示。


回想在关系数据库中如果要存储汽车对象,存储结构如下表所示。


数据是以二维表的形式存储的,这就要求所有的记录都拥有同样的属性,无法单独为某条记录增减属性。如果想为ID为1的汽车增加生产日期属性,就需要把数据表更改为如下表所示的结构。


对于ID为2和3的两条记录而言date字段是冗余的。可想而知当不同的记录需要不同的属性时,表的字段数量会越来越多以至于难以维护。而且当使用ORM将关系数据库中的对象实体映射成程序中的实体时,修改表的结构往往意味着要中断服务(重启网站程序)。为了防止这些问题,在关系数据库中存储这种半结构化数据还需要额外的表才行。
而Redis的散列类型则不存在这个问题。虽然我们在图3-5中描述了汽车对象的存储结构,但是这个结构只是人为的约定,Redis并不要求每个键都依据此结构存储,我们完全可以自由地为任何键增减字段而不影响其他键。

3.3.2 命令
1.赋值与取值
HSET key field value
HGET key field
HMSET key field value [field value …]
HMGET key field [field …]
HGETALL key

HSET命令用来给字段赋值,而HGET命令用来获得字段的值。
用法如下:
redis>HSET car price 500
(integer) 1
redis>HSET car name BMW
(integer) 1
redis>HGET car name
"BMW"

HSET命令的方便之处在于不区分插入和更新操作,这意味着修改数据时不用事先判断字段是否存在来决定要执行的是插入操作(update)还是更新操作(insert)。当执行的是插入操作时(即之前字段不存在)HSET命令会返回1,当执行的是更新操作时(即之前字段已经存在)HSET命令会返回0。更进一步,当键本身不存在时,HSET命令还会自动建立它。下面还会介绍一个hsetnx命令,就只是在键不存在的时候才赋值。

提示:
在Redis中每个键都属于一个明确的数据类型,如通过HSET命令建立的键是散列类型,通过SET命令建立的键是字符串类型等。使用一种数据类型的命令操作另一种数据类型的键会提示错误:“ERR Operation against a key holding the wrong kind of value”① 。
注释:①并不是所有命令都是如此,比如SET命令可以覆盖已经存在的键而不论原来键是什么类型。
如果想获取键中所有字段和字段值却不知道键中有哪些字段时(如3.3.1节介绍的存储汽车对象的例子,每个对象拥有的属性都未必相同)应该使用HGETALL命令。如:
redis>HGETALL car
1) "price"
2) "500"
3) "name"
4) "BMW"

返回的结果是字段和字段值组成的列表,不是很直观,好在很多语言的Redis客户端会将HGETALL的返回结果封装成编程语言中的对象,处理起来就非常方便了。

2.判断字段是否存在
HEXISTS key field

HEXISTS命令用来判断一个字段是否存在。如果存在则返回1,否则返回0(如果键不存在也会返回0)。
redis>HEXISTS car model
(integer) 0
redis>HSET car model C200
(integer) 1
redis>HEXISTS car model
(integer) 1


3.当字段不存在时赋值
HSETNX key field value

HSETNX① 命令与HSET命令类似,区别在于如果字段已经存在,HSETNX命令将不执行任何操作。HSETNX命令是原子操作,不用担心竞态条件。

4.增加数字
HINCRBY key field increment

HINCRBY命令与INCRBY类似,可以使字段值增加指定的整数。散列类型没有HINCR命令,但是可以通过HINCRBY keyfield 1来
实现。
HINCRBY命令的示例如下:
redis>HINCRBY person score 60
(integer) 60

之前person键不存在,HINCRBY命令会自动建立该键并默认score字段在执行命令前的值为“0”。命令的返回值是增值后的字段值。

5.删除字段
HDEL key field [field …]

HDEL命令可以删除一个或多个字段,返回值是被删除的字段个数:
redis>HDEL car price
(integer) 1
redis>HDEL car price
(integer) 0


6.只获取字段名或字段值
HKEYS key
HVALS key

有时仅仅需要获取键中所有字段的名字而不需要字段值,那么可以使用HKEYS命令,就像这样:
redis>HKEYS car
1) "name"
2) "model"

HVALS命令与HKEYS命令相对应,HVALS命令用来获得键中所有字段值,例如:
redis>HVALS car
1) "BMW"
2) "C200"


7. 获得字段数量
HLEN key

例如:
redis>HLEN car
(integer) 2

  • 大小: 73.2 KB
  • 大小: 66.8 KB
  • 大小: 67.1 KB
0
0
分享到:
评论

相关推荐

    Redis-x64-3.2.100-稳定版.rar

    2. **3.2.100 版本特性**:此版本是 Redis 的一个稳定版本,相比早期版本,3.2 版本引入了一些新特性,如 LRU(最近最少使用)驱逐策略的改进、流(Streams)数据类型、发布/订阅(Pub/Sub)模式的增强等,提高了...

    Redis-x64-3.2.100压缩包及使用说明.rar

    Redis-x64-3.2.100是针对64位Windows平台的Redis服务器的一个具体版本,该版本提供了稳定性和兼容性的保证。本文将详细介绍如何安装和使用这个版本的Redis以及一些基础的Redis命令和解决连接错误的方法。 首先,...

    Redis-windows-3.2 64bit

    "Redis-windows-3.2 64bit"是Redis的一个针对Windows操作系统的64位版本,适用于那些在Windows环境下运行Redis的用户。 Redis在Linux操作系统上非常流行,但在Windows环境下,它的安装和配置可能会相对复杂一些。...

    windows-Redis-x64-3.2.100

    Redis支持多种数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据结构使得Redis能够处理各种复杂的应用场景。例如,你可以使用字符串存储简单的键值对,...

    Redis-x64-3.2.100.rar

    同时,理解 Redis 的数据类型(String、Hash、List、Set、Sorted Set)以及它们的用法是至关重要的,这将帮助你设计高效的键值存储方案。 总的来说,Redis 是一个强大的内存数据结构存储系统,通过合理使用其特性,...

    Redis-x64-3.2.100.zip(window版本)

    它支持多种数据类型,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)以及有序集合(Sorted Set)。这些数据类型使得Redis能够处理各种复杂的数据结构和业务需求。 在Windows环境下安装Redis-x64-3.2...

    windows redis客户端连接工具, Redis-x64-3.2.100, 亲测可用

    6. **数据类型**:Redis支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。理解这些数据类型及其用途对于有效利用Redis非常重要。 7. **主从复制**:...

    Redis-x64-3.2

    Redis-x64-3.2 是 Redis 数据库在 Windows 平台上的 64 位版本,具体为 3.2.100 版本。Redis 是一个高性能的键值存储系统,常用于数据库、缓存和消息中间件等场景。它的全称是 "Remote Dictionary Server",支持多种...

    Redis-x64-3.2.100.zip

    总的来说,“Redis-x64-3.2.100.zip”包含的是一个64位的Redis服务器,它具备了丰富的数据结构、持久化、复制、事务、发布订阅、脚本等功能,适用于构建高性能的缓存系统、数据库以及消息传递平台。解压并安装这个...

    Redis windows解压版 Redis-x64-3.2.100.zip

    解压"Redis-x64-3.2.100.zip"后,你会得到一个名为"Redis-x64-3.2.100解压版-20180718"的文件夹,其中包含以下关键文件和目录: 1. `redis-server.exe`: 这是Redis服务器的可执行文件,负责处理客户端请求和管理...

    redis-3.2版本

    5. **数据类型**:Redis支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。3.2版本可能引入了新的数据结构特性和操作,例如对集合操作的优化。 6. **持久化**:...

    redis-source-win-3.2.100.zip

    6. **数据类型**:Redis支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),这些都是Redis功能强大的基础。 7. **命令与协议**:Redis使用简单明了的命令行协议...

    Redis-x64-3.2.100_windows最新版本

    10. **内存模型**:了解 Redis 的数据类型(如 String、Hash、Set、List、Sorted Set)及其内存占用情况,有助于高效利用内存并设计合适的数据结构。 总之,Redis-x64-3.2.100 是在 Windows 平台上运行 Redis 的一...

    phpredis-master.zip php中redis扩展库

    $redis-&gt;hSet('hashKey', 'field1', 'value1'); $value = $redis-&gt;hGet('hashKey', 'field1'); ``` - 集合操作(Sadd/Srem/Sismember): ```php $redis-&gt;sAdd('setKey', 'member1', 'member2'); $redis-&gt;sRem('...

    Redis稳定版 Redis-x64-5.0.14.1.zip

    1. **数据类型**: Redis支持五大数据类型:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),这些类型为各种应用场景提供了丰富的选择。 2. **持久化**: Redis提供了两种主要的持久化...

    Redis-3.2.100-Windows-64.zip

    这个版本引入了多个新功能和优化,如LUA脚本的原子执行、Stream数据类型(虽然在这个版本中可能尚未完全实现)、Redis Cluster的改进以及对Redis Sentinel的支持增强。 2. **Redis在Windows上的运行**:Redis原生...

    redis-2.8.9

    1. 数据类型:Redis支持五种基本的数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据类型可以满足各种不同的应用场景,例如缓存、计数器、发布订阅等。 ...

    Redis-x64-3.2.100

    总的来说,Redis-x64-3.2.100是Windows环境下的一个高效数据存储解决方案,具备快速、灵活和丰富的数据操作能力,适用于多种业务场景。正确安装和配置后,可以极大地提升应用程序的性能和数据处理能力。

    redis-windows-7.2.4.zip

    - **键值存储**:Redis基于键值对的数据结构,键和值可以是字符串、哈希、列表、集合、有序集合等多种类型。 - **内存存储**:Redis默认将所有数据存储在内存中,提供极快的读写速度,但也可以通过配置进行持久化...

Global site tag (gtag.js) - Google Analytics