Redis 字符串

Redis 字符串简介

Redis 字符串存储字节序列,包括文本、序列化对象和二进制数组。因此,字符串是您可以与 Redis 键关联的最简单的值类型。它们通常用于缓存,但它们支持额外的功能,可以让您实现计数器并执行按位操作。

由于 Redis 键是字符串,当我们将字符串类型也用作值时,我们实际上是在将字符串映射到另一个字符串。字符串数据类型对于许多用例非常有用,例如缓存 HTML 片段或页面。

如您所见,使用 SETGET 命令是我们设置和检索字符串值的方式。请注意,SET 会替换已存储在键中的任何现有值,如果键已存在,即使该键与非字符串值相关联。因此,SET 执行赋值操作。

值可以是各种类型的字符串(包括二进制数据),例如,您可以将 jpeg 图像存储在值中。值的大小不能超过 512 MB。

SET 命令有一些有趣的选项,以附加参数的形式提供。例如,我可以要求 SET 在键已存在时失败,或者相反,只有在键已存在时才成功。

除了操作字符串的命令外,还有很多其他命令。例如,GETSET 命令将键设置为新值,并返回旧值作为结果。您可以使用此命令,例如,如果您有一个系统使用 INCR 在您的网站每次收到新访问者时递增 Redis 键。您可能希望每小时收集一次此信息,而不会丢失任何递增。您可以 GETSET 该键,将它分配给新值“0”并读取旧值。

能够在单个命令中设置或检索多个键的值对于减少延迟也很有用。因此,存在 MSETMGET 命令。

当使用 MGET 时,Redis 返回一个值数组。

字符串作为计数器

即使字符串是 Redis 的基本值,您也可以对它们执行一些有趣的操作。例如,其中之一是原子递增。

INCR 命令将字符串值解析为整数,将其递增 1,最后将获得的值设置为新值。还有其他类似的命令,例如 INCRBYDECRDECRBY。在内部,它始终是相同的命令,以略微不同的方式起作用。

INCR 是原子的意味着什么?即使多个客户端对同一个键发出 INCR,也不会进入竞争状态。例如,客户端 1 读取“10”,客户端 2 同时读取“10”,两者都递增到 11,并将新值设置为 11 这种情况永远不会发生。最终值始终为 12,并且读-增量-设置操作是在所有其他客户端未同时执行命令的情况下执行的。

限制

默认情况下,单个 Redis 字符串最大可以为 512 MB。

基本命令

获取和设置字符串

  • SET 存储字符串值。
  • SETNX 仅当键不存在时才存储字符串值。对于实现锁很有用。
  • GET 检索字符串值。
  • MGET 在单个操作中检索多个字符串值。

管理计数器

  • INCRBY 原子地递增(并在传递负数时递减)存储在给定键处的计数器。
  • 还有另一个用于浮点数计数器的命令:INCRBYFLOAT.

按位运算

要对字符串执行按位运算,请参阅 位图数据类型 文档。

查看 完整的字符串命令列表.

性能

大多数字符串操作都是 O(1),这意味着它们非常高效。但是,请注意 SUBSTRGETRANGESETRANGE 命令,它们可能是 O(n)。这些随机访问字符串命令在处理大型字符串时可能会导致性能问题。

替代方案

如果您将结构化数据存储为序列化字符串,您可能还想考虑 Redis 哈希JSON.

了解更多

RATE THIS PAGE
Back to top ↑