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) 的,这意味着它们效率很高。但是,对于可能是 O(n) 的 SUBSTRGETRANGESETRANGE 命令要小心。这些随机访问字符串命令在处理大字符串时可能会导致性能问题。

替代方案

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

了解更多

评价此页面
返回顶部 ↑