哈希是一种数据结构,用于存储键到值的映射,类似于 Redis 自身的微型版本。与列表和集合不同,哈希可以存储可以递增或递减的值(如果它们可以被解释为数字)。
哈希是可变的,这意味着我们可以随时添加、更改、递增或删除字段-值对,而不仅仅是在初始声明时。它们将字段值存储为字符串,这意味着它们是扁平的,没有嵌套的数组或对象。我们不需要预定义 Redis 哈希的字段名称,因此,我们可以根据需要添加和删除字段。
虽然 Redis 哈希是无模式的,但我们仍然可以将它们视为关系数据库表中的轻量级对象或行。
加入 Kyle Davis 和 Loris Cro 的网络研讨会,涵盖 P11c 数据结构的概念、权衡和优势。您将听到关于 hyperloglog、Bloom 过滤器和 cuckoo 过滤器的信息,以及如何在 Redis 中使用它们。您还将听到可以利用这些数据结构的常见用例。
在角色扮演游戏中,玩家生、死、重生,这种生命周期反映在生命值、盔甲、能力和战斗中。我们将把这些信息存储在一个哈希中,每个玩家都有自己的哈希实例。我们将使用新信息更新此玩家哈希,创建临时字段,并使用内置功能来递增数值和更新字符串。
对于第一个示例,我们将创建一个哈希,从以下字段开始:名称、种族、等级、生命值和金币。要创建此哈希,我们将使用命令 hset
。 hset
命令的第一个参数是我们将用于访问哈希的键名。在本例中,它是 player:42
。
在这里,我们使用了一个常见的 Redis 键命名约定。我们首先使用单词“player”来指示我们存储的内容类型。然后,我们跟随一个冒号和这个玩家的 id。冒号分隔了键名的各个部分,从左侧最不具体到右侧最具体。指定键后,我们添加任意数量的字段-值对。当我们运行此命令时,Redis 返回 5,指示保存到哈希的字段数。我们现在为我们的第一个魔法师和牛头人玩家创建了一个 Redis 哈希。
现在,让我们看看如何更新和删除 Redis 哈希中的字段。假设玩家 Texius 正在与巫师进行一场史诗般的战斗,并且头部受到了雷击法术。在游戏中,他将拥有“眩晕”状态,以反映 Redis 哈希中的这种游戏状态。我们将字段-值对 status: dazed
添加到玩家哈希实例。同样,我们将使用 hset
命令来添加一个新的字段-值对。所以我们将运行的命令是 hset player:42 status dazed
。
当我们的玩家不再处于“眩晕”状态时会发生什么?我们希望从哈希实例中删除状态字段。要从 Redis 哈希中删除字段-值对,我们使用命令 hdel
。该命令是 hdel player:42 status
。现在,player:42
哈希实例不再具有“眩晕”状态,我们的 Texius 活着继续他的冒险。
从哈希中获取数据就像设置数据一样容易。假设我们需要检索 Texius 的等级。为此,我们需要使用 hget
命令。该命令是 hget player:42 level
。
Redis 哈希将字段值存储为字符串,这意味着它们是扁平的,没有嵌套的数组或对象。 Redis 哈希是无模式的,但您仍然可以将它们视为轻量级对象或关系数据库表中的行。哈希提供对单个字段的有效访问,使其非常适合存储和检索复杂对象。哈希还可用于实现计数器,以及缓存和会话管理。 Redis 哈希快速高效,使其成为许多用例的绝佳选择。