Redis SETEX 命令
从 Redis 2.6.12 版本开始,此命令被标记为已废弃。在迁移或编写新的代码时,可以使用带有 EX 参数的 SET 命令替代。 语法1SETEX key seconds value 可用版本 ≥ 2.0.0 时间复杂度 $O(1)$ ACL类别 @write, @string, @slow 设置 key 以保存字符串值,并将 key 设置为在给定的秒数后过期。此命令等效于: 1SET key value EX seconds 当秒数无效时,返回错误。 返回值如果正确执行,则返回 OK。 示例123456redis> SETEX tt_key 1000 "JOHNSON"OKredis> TTL tt_key(integer) 1000redis> GET tt_key"JOHNSON" (END)
Redis SET 命令
语法12SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL] 可用版本 ≥ 1.0.0 时间复杂度 $O(1)$ ACL类别 @write, @string, @slow 设置 key 保存字符串类型的 value。如果 key 已经持有一个值,它将被覆盖,不管它是什么类型。在成功的 SET 操作中,任何先前与 key 相关的生存时间都会被丢弃。 选项SET 命令支持以下选项: EX seconds — 设置指定的过期时间,单位为秒。 PX milliseconds — 设置指定的过期时间,单位是毫秒。 EXAT timestamp-seconds — 设置指定的 Unix 时间,key 将在该时间过期,单位是秒。 PXAT timestamp-milliseconds — 设置指定的 Unix 时间,以毫秒为单位,key 将在该时间过期。 NX — 只有在 key...
Redis PSETEX 命令
从 Redis 2.6.12 版本开始,此命令被视为已弃用。在迁移或编写新的代码时,可以将其替换为带有 PX 参数的 SET 命令。 语法1PSETEX key milliseconds value 可用版本 ≥ 2.6.0 时间复杂度 $O(1)$ ACL类别 @write, @string, @slow PSETEX 的工作方式与 SETEX 完全一样,唯一的区别是过期时间是以毫秒而不是以秒为单位。 返回值总是返回 "OK" 示例123456redis> PSETEX mykey 1000 "Hello""OK"redis> PTTL mykey(integer) 1000redis> GET mykey"Hello" (END)
Redis MSETNX 命令
语法1MSETNX key value [key value ...] 可用版本 ≥ 1.0.1 时间复杂度 $O(N)$ 其中 N 是要设置的 key 的数量。 ACL类别 @write, @string, @slow 将给定的键设置为其各自的值。但只要有一个键已经存在,MSETNX 就不会执行任何操作。 由于这种语义,可以使用 MSETNX 来设置代表唯一逻辑对象的不同字段的不同键,以确保设置所有字段或根本不设置任何字段。 MSETNX 是原子的,所以所有给定的键都是一次性设置的。也就是说,客户端不可能看到一些键被更新,而另一些键却没有变化。 返回值返回一个整数,具体而言: 1 - 如果所有的键都被设置了,则返回 1; 0 - 如果没有设置任何键(至少有一个键已经存在),则返回 0。 示例12345678redis> MSETNX key1 "Hello" key2 "there"(integer) 1redis> MSETNX key2 "new" key3...
Redis MSET 命令
语法1MSET key value [key value ...] 可用版本 ≥ 1.0.1 时间复杂度 $O(N)$ 其中 N 是要设置的 key 的数量。 ACL类别 @write, @string, @slow 将给定的键设置为它们各自的值。MSET 用新的值替换现有的值,就像普通的 SET 一样。如果你不想覆盖现有的值,请参阅 MSETNX。 MSET 是原子性的,所以所有给定的键都是一次性设置的。也就是说,客户端不可能看到一些键被更新而另一些键没有变化。 返回值总是返回 OK,因为 MSET 命令永远不会失败。 示例123456redis> MSET key1 "Hello" key2 "World""OK"redis> GET key1"Hello"redis> GET key2"World" (END)
Redis MGET 命令
语法1MGET key [key ...] 可用版本 ≥ 1.0.0 时间复杂度 $O(N)$ 其中 N 是要检索的 key 的数量。 ACL类别 @read, @string, @fast 返回所有指定 key 的值。对于每个不持有字符串值或不存在的键,将返回特殊值 nil。正因为如此,该操作永远不会失败。 返回值返回一个数组,元素由所有给定的 key 上的值组成。 示例12345678redis> SET key1 "Hello""OK"redis> SET key2 "World""OK"redis> MGET key1 key2 nonexisting1) "Hello"2) "World"3) (nil) (END)
Redis LCS 命令
语法1LCS key1 key2 [LEN] [IDX] [MINMATCHLEN min-match-len] [WITHMATCHLEN] 可用版本 ≥ 7.0.0 时间复杂度 $O(N*M)$ 其中 N 和 M 分别是 s1 和 s2 的长度。 ACL类别 @read, @string, @slow LCS 命令实现了最长的公共子序列算法。请注意,这与最长公共字符串算法不同,因为字符串中的匹配字符不需要是连续的。 例如,”foo” 和 “fao” 之间的 LCS 是 “fo”,因为从左到右扫描这两个字符串,最长的共同字符集是由第一个 “f”,然后是 “o”组成。 LCS 对于评估两个字符串的相似程度非常有用。字符串可以表示很多东西。例如,如果两个字符串是 DNA 序列,LCS 将提供两个 DNA 序列之间的相似性度量。如果字符串表示某些用户编辑的某些文本,则 LCS 可以表示新文本与旧文本相比有何不同,等等。 请注意,此算法的运行时间复杂度为 $O(N×M)$,其中 N 是第一个字符串的长度,M 是第二个字符串的长度。因此,要么启动一个不同的 Redis...
Redis INCRBYFLOAT 命令
语法1INCRBYFLOAT key increment 可用版本 ≥ 2.6.0 时间复杂度 $O(1)$ ACL类别 @write, @string, @fast 将存储在 key 上的数值(字符串表示)加上浮点数 increment。 如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设置为 0,然后再执行加法操作。 key 的值可以是整数或双精度浮点数。increment 也可以是整数或双精度浮点数。 如果发生以下情况之一,将返回一个错误: 键包含一个错误类型的值(不是一个字符串)。 当前键的内容或指定的增量不能被解析为双精度浮点数字。 如果命令执行成功,相加后的值将被存储为键的新值(取代旧值),并作为字符串返回给调用者。 key...
Redis INCRBY 命令
语法1INCRBY key increment 可用版本 ≥ 1.0.0 时间复杂度 $O(1)$ ACL类别 @write, @string, @fast 将 key 中储存的数字加上指定的增量值。如果键不存在,则在执行操作前将其设置为 0。如果键包含一个错误类型的值或包含一个不能表示为整数的字符串,则返回错误。 该操作仅限于 64 位有符号的整数。 返回值返回一个整数,表示加上指定的增量值之后的 key 值。 示例 1以下例子演示了使用 INCRBY 命令对一个存储整数值的键进行加 2 操作: 12345redis> SET counter "1000"OKredis> INCRBY counter 2(integer) 1002redis> 示例 2对一个不存在的键进行 INCRBY 操作: 1234567redis> EXISTS total(integer) 0redis> INCRBY total 5(integer) 5redis> GET total"5"redis> 示例...
Redis INCR 命令
语法1INCR key 可用版本 ≥ 1.0.0 时间复杂度 $O(1)$ ACL 类别 @write, @string, @fast 将存储在键上的数字值增加 1。如果键不存在,在执行操作前先将其设置为 0。如果键包含一个错误类型的值,或者包含一个不能表示为整数的字符串,则返回一个错误。该操作仅限于 64 位有符号的整数。 注意:这是一个字符串操作,因为 Redis 没有专门的整数类型。存储在键中的字符串被解释为以 10 为基数的 64 位带符号整数以执行操作。 Redis 以其整数表示法存储整数,因此对于实际包含整数的字符串值,存储整数的字符串表示法没有开销。 返回值返回一个整数,表示执行 DECR 操作后,key 对应的值。 模式:计数器使用 Redis 原子增量操作可以做的最简单的事情就是计数器模式。其思想就是每次操作发生时向 Redis 发送 INCR 命令。例如,在 Web 应用程序中,我们可能想要知道某个用户每天访问了多少页面。 为此,Web 应用程序可以在用户每次浏览页面时,简单地递增一个键——通过将用户 ID...
Redis GETSET 命令
从 Redis 版本 6.2.0 开始,此命令被视为已弃用 。 在迁移或编写新代码时,可以将其替换为带有 `GET` 参数的 `SET` 命令。 从 Redis 版本 6.2.0 开始,此命令被视为已弃用。在迁移或编写新代码时,可以将其替换为带有 GET 参数的 SET 命令。 语法1GETSET key value 可用版本 ≥ 1.0.0 时间复杂度 $O(1)$ ACL 类别 @write, @string, @fast 原子地将 key 设置为 value,并返回存储在 key 中的旧值。当 key 存在但存储的值不是字符串类型时返回错误。成功的 SET 操作会丢弃与键关联的任何过期时间。 返回值返回存储在 key 中的旧值。 当 key 没有旧值(即 key 不存在)时,返回 nil。 当 key 存在但存储的值不是字符串类型时,返回错误。 设计模式GETSET 可以与 INCR 一起使用,用于原子重置计数。例如:进程可能会在每次发生某些事件时针对键 mycounter 调用 INCR,但有时我们需要获取计数器的值并将其自动重置为零。这可以使用 GETSET...
Redis GETRANGE 命令
语法1GETRANGE key start end 可用版本 ≥ 2.4.0 时间复杂度 $O(N)$ 其中 N 是返回字符串的长度。最终的复杂度由返回的长度决定,但是从已存在的字符串中创建子字符串的成本非常低,对于短字符串可以看作 $O(1)$。 ACL 类别 @read, @string, @slow 返回存储在 key 中的字符串值的子字符串,由偏移量 start 和 end 确定(两者都是包括在内的)。可以使用负偏移量以提供从字符串末尾开始的偏移量。即 -1 表示最后一个字符,-2 表示倒数第二个,等等。 该函数通过将结果范围限制为字符串的实际长度来处理超出范围的请求。 返回值返回 key 中字符串值的子字符串。 示例设置 tt 的值为 Rain rain go away: 12redis> SET tt "Rain rain go away"OK 获取 tt 的值: 123redis> GET tt"Rain rain go away"redis> 返回 tt...
Redis GETEX 命令
语法12GETEX key [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | PERSIST] 可用版本 ≥ 6.2.0 时间复杂度 $O(1)$ ACL 类别 @write, @string, @fast 获取 key 的值,并可以选择设置其过期时间。GETEX 与 GET 类似,但它是一个带有额外选项的写命令。 选项GETEX 命令支持以下选项来修改它的行为: EX seconds — 设置指定的过期时间,单位是秒。 PX milliseconds — 设置指定的过期时间,单位是毫秒。 EXAT timestamp-seconds — 设置指定的 Unix 时间,key 将在该时间过期,单位是秒。 PXAT timestamp-milliseconds — 设置指定的 Unix 时间,key 将在该时间过期,单位是毫秒。 PERSIST — 删除 key 的过期时间,即 key 永不过期。 返回值返回 key 的值,如果 key 不存在,则返回...
查看 Redis 版本号
查看服务端版本1redis-server -v 或 1redis-server --version 例如,使用 redis-server -v 查看 Redis 的版本信息: 12$ redis-server -vRedis server v=7.0.4 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=59659b131c47ab91 输出信息如下: redis-server - 表示这是 Redis 服务器进程 v=7.0.4 - Redis 的版本号,这里是7.0.4版本 sha=00000000:0 - Git SHA 标识,用来标识 Git 中的某个提交 malloc=jemalloc-5.2.1 - Redis 使用的内存分配器,这里是 jemalloc 5.2.1 版本 bits=64 - Redis 编译时使用的位数,这里是 64 位 build=59659b131c47ab91 - Redis 的构建 ID 查看客户端版本1redis-cli -v 或 1redis-cli...
从源代码编译和安装 Redis
我们可以在主流操作系统(包括 Windows、Linux 和 macOS)上从源代码编译和安装 Redis。Redis 除了 C 编译器和 libc 之外没有其他依赖。 Redis可以在以下系统上编译和安装: Linux - 包括 Ubuntu,RedHat,Arch Linux 等发行版。 macOS 其他类 UNIX 系统 - 如 FreeBSD,OpenBSD。 Windows - 需要安装 MinGW 并编译 Windows 版本的 Redis。 要从源代码编译 Redis,需要: 安装 git 并克隆 Redis 最新版本的源代码: 1git clone https://github.com/redis/redis.git Redis 的源文件也可以从官方下载页 [https://redis.io/download] 直接下载获得。可以通过对照 redis-hashes git 仓库中的摘要来验证这些下载文件的完整性。 要从 Redis 下载站点获取最新稳定版 Redis 的源文件,请运行: 1wget...
Redis DECRBY 命令
语法1DECRBY key decrement 可用版本 ≥ 1.0.0 时间复杂度 $O(1)$ ACL 类别 @write, @string, @fast 将存储在 key 的数字值减去 decrement。如果 key 不存在,则先将 key 的值初始化为 0,然后再执行 DECRBY 操作。如果 key 包含一个错误类型的值或包含一个不能表示为整数的字符串,则返回错误。这个操作仅限于 64 位有符号的整数。 返回值返回一个整数,表示执行 DECRBY 操作后,key 对应的值。 示例 1对已存在且其值类型为整数的 key 进行 DECRBY 操作: 12345redis> SET cnt 1000OKredis> DECRBY cnt 1(integer) 999redis> 示例 2对不存在的 key 进行 DECRBY 操作: 1234567redis> EXISTS cnt(integer) 0redis> DECRBY cnt 1(integer) -1redis> GET...
Redis GETDEL 命令
语法1GETDEL key 可用版本 ≥ 6.2.0 时间复杂度 $O(1)$ ACL 类别 @write, @string, @fast 获取 key 的值并删除该 key。 如果 key 不存在,则返回 nil。 如果存储在 key 的值不是字符串类型,则返回一个错误。 该命令与 GET 类似,除了它在成功时会删除键(当且仅当键的值类型是字符串时)。 返回值返回 key 的值,如果 key 不存在则返回 nil,如果 key 的值类型不是字符串则返回错误。 示例 1在此示例中演示了 Redis 的 GETDEL 命令同时获取值并删除的效果。 在这个示例中: 首先使用 SET 命令设置 KEY token 的值为 access_token 使用 GET 命令获取 token 的值,返回 access_token 使用 GETDEL 命令获取 token 的值,并删除该 KEY,返回 access_token 再次使用 GET 命令获取 token 的值,由于该 KEY 已被删除,所以返回 nil 123456789redis> SET token...
Redis DECR 命令
语法1DECR key 可用版本 ≥ 1.0.0 时间复杂度 $O(1)$ ACL 类别 @write, @string, @fast 将存储在 key 的数字值减 1。如果 key 不存在,则先将 key 的值初始化为 0,然后再执行 DECR 操作。如果 key 包含一个错误类型的值或包含一个不能表示为整数的字符串,则返回错误。这个操作仅限于 64 位有符号的整数。 返回值返回一个整数,表示执行 DECR 操作后,key 对应的值。 示例 1以下示例演示了当对一个不存在的键执行 DECR 操作时,Redis 会先为该键创建一个初始值为 0 的值,然后再执行减一操作。 使用 EXISTS 命令检查 foo 键是否存在,返回 0,表示键不存在。 然后使用 DECR 命令对 foo 键执行减一操作。由于键不存在,DECR 命令会先为 foo 键创建一个值,并将其设置为 0,然后再对其执行减一操作,使值变为 -1。DECR 返回 -1。 接着使用 GET 命令获取 foo 的值,返回 "-1"。 再次使用 DECR 命令对 foo 执行减一操作,使其值变为...
Redis GET 命令
语法1GET key 可用版本 ≥ 1.0.0 时间复杂度 $O(1)$ ACL 类别 @read, @string, @fast 返回 key 的值,如果 key 不存在时,返回 nil。 如果存储在 key 的值不是字符串类型,则返回一个错误,因为 GET 命令只处理字符串值。 示例 1在此示例中,我们演示了使用 GET 命令获取 foo 键在存在与不存在两种情况下的值。 首先,我们使用 EXISTS 命令检查 foo 键是否存在,返回 0,表示不存在。 然后,我们试图通过 GET 命令获取 foo 的值,由于键不存在,返回 nil。 接着,我们使用 SET 命令给 foo 键设置字符串值 "Rain"。SET 命令返回 OK,表示设置成功。 最后,再次使用 GET 命令获取 foo 的值,这次返回 "Rain"。 123456789redis> EXISTS foo(integer) 0redis> GET foo(nil)redis> SET foo "Rain"OKredis> GET...
Redis APPEND 命令
语法1APPEND key value 可用版本 ≥ 2.0.0 时间复杂度 $O(1)$ 假设附加的值很小,并且已经存在的值是任何大小,摊销后的时间复杂度是O(1),因为Redis使用的动态字符串库会在每次重新分配时将可用空间增加一倍。 如果追加的值比较小,而当前已经存在的值大小任意,那么摊销后的时间复杂度是 $O(1)$,因为 Redis 使用的动态字符串库会在每次重新分配时将可用空间增加一倍。 ACL类别 @write, @string, @fast 如果 key 已经存在并且它的值的数据类型是字符串,APPEND 命令会将 value 追加到该 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。 返回值返回一个整数,表示追加操作后,key 对应值的字符串长度。 示例 1以下例子示范了如何使用 APPEND 命令在 Redis 中追加字符串。 首先,检查 foo 键是否存在,由于返回 0,说明不存在。 然后,执行 APPEND foo "Rain",向...