Redis 字符串

Redis 字符串简介

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

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

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

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

SET 命令有一些有趣的选项,这些选项作为额外的参数提供。例如,我可以要求 SET 在键已经存在时失败,或者相反,只有在键已经存在时才成功:

有许多其他命令用于操作字符串。例如,GETSET 命令将键设置为新值,并返回旧值作为结果。例如,如果您有一个系统,每次您的网站接收到新访问者时,都会使用 INCR 增加 Redis 键的值。您可能希望每小时收集一次此信息,而不会丢失任何增量。您可以使用 GETSET 命令,将键设置为新值 "0" 并读取旧值。

在一个命令中设置或检索多个键值的能力对于减少延迟也非常有用。因此,有MSETMGET命令:

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

字符串作为计数器

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

INCR 命令将字符串值解析为整数,将其增加一,最后将获得的值设置为新值。还有其他类似的命令,如 INCRBYDECRDECRBY。在内部,它们始终是相同的命令,只是以略微不同的方式执行。

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

限制

默认情况下,单个Redis字符串的最大长度为512 MB。

基本命令

获取和设置字符串

  • SET 存储一个字符串值。
  • SETNX 仅在键不存在时存储字符串值。用于实现锁。
  • GET 获取一个字符串值。
  • MGET 在一次操作中检索多个字符串值。

管理计数器

  • INCR 原子地将存储在给定键的计数器增加1。
  • INCRBY 原子地递增(当传递负数时递减)存储在给定键中的计数器。
  • 另一个用于浮点计数器的命令是:INCRBYFLOAT

位操作

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

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

性能

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

替代方案

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

了解更多

RATE THIS PAGE
Back to top ↑