Redis PFADD 命令
语法1PFADD key [element [element ...]] 可用版本 ≥ 2.8.9 时间复杂度 每添加一个元素的复杂度为 $O(1)$ ACL类别 @write, @hyperloglog, @fast 将所有的元素参数添加到 HyperLogLog 数据结构中,存储在作为第一个参数指定的变量名称中。 作为这个命令的副作用,在执行此命令时,HyperLogLog 内部可能会更新,以反映截至目前为止添加的唯一项目数的不同近似值(集合的基数)。 如果 HyperLogLog 估计的近似基数在执行命令后发生变化,PFADD 将返回 1,否则返回 0。如果指定的键不存在,该命令将自动创建一个空的 HyperLogLog 结构(即具有指定长度和给定编码的 Redis 字符串)。 在调用命令时,如果不传递元素,而只有有效的 key 名称,那么如果 key 已经存在则不执行任何操作,否则只创建数据结构(在后一种情况下会返回 1)。 有关 HyperLogLog 数据结构的更多信息,请参阅 PFCOUNT 命令文档。 返回值返回一个整数,如果 HyperLogLog...
如何修复PyCharm中的“Shadows name from outer scope”警告
PyCharm 是一款由 JetBrains 开发的受欢迎的 Python 集成开发环境(IDE)。作为一款现代化的 IDE,PyCharm 几乎支持所有你能想到的功能,例如代码调试、语法高亮、项目管理、智能提示、自动补全、单元测试以及版本控制等。除此之外,PyCharm 还提供 Django 的高级 Web 开发工具,并且支持 Anaconda 和 IronPython 进行数据科学开发。 然而,在使用 PyCharm 工作时,你可能会遇到一些警告信息,其中部分不是 Python 本身的错误信息。“Shadows name from outer scope”就是其中最常见的警告信息之一,这会给新用户带来一定的困扰。本文将解释为什么会出现该警告,以及你可以采取什么措施来避免出现该警告。 为什么会出现“Shadows name from outer scope”警告让我们看下面的代码片段作为示例: 123456access_token = "HCbhQHCuG05WdVm506BE"def list_tag(access_token): # Warning:...
Redis BITCOUNT 命令
语法1BITCOUNT key [start end [BYTE | BIT]] 可用版本 ≥ 2.6.0 时间复杂度 $O(N)$ ACL类别 @read, @bitmap, @slow 计算给定字符串中,被设置为 1 的比特位的数量。 默认情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 和 end 参数,可以让计数只在特定的位上进行。 start 和 end 参数的设置和 GETRANGE key start end 命令类似,都可以使用负数值: 比如 -1 表示最后一个字节,-2 表示倒数第二个字节,以此类推。 不存在的 key 被当成是空字符串来处理,因此对一个不存在的 key 进行 BITCOUNT 操作,结果为 0 。 默认情况下,参数 start 和 end 指定一个字节索引。我们可以使用一个附加参数 BIT 来指定一个比特索引。所以 0 是第一位,1 是第二位,以此类推。对于负值,-1 是最后一位,-2 是倒数第二位,依此类推。 返回值返回一个整数,表示被设置为 1 的位的数量。 示例 1对一个不存在的 key 进行 BITCOUNT...
Redis SUBSTR 命令
从 Redis 2.0.0 版本开始,此命令被标记为已废弃。在迁移或编写新的代码时,可以使用 GETRANGE 命令替代。 语法1SUBSTR key start end 可用版本 ≥ 1.0.0 时间复杂度 $O(N)$ 其中 N 是返回字符串的长度。复杂度最终是由返回的长度决定的,但是由于从现有的字符串中创建一个子串的代价是非常低的,对于小的字符串可以认为是 $O(1)$。 ACL类别 @read, @string, @slow 返回存储在 key 中的字符串值的子串,由偏移量 start 和 end 决定(两者均包括在内)。负的偏移量可以用来提供一个从字符串的末尾开始的偏移量。所以 -1 表示最后一个字符,-2 表示倒数第二个,以此类推。 该命令通过将结果范围限制为字符串的实际长度来处理超出范围的请求。 返回值返回存储在 key 中的字符串值的子串。 示例 112345redis> SET user "JOHNSON LIN"OKredis> SUBSTR user 1 2"OH" 示例...
Redis STRLEN 命令
语法1STRLEN key 可用版本 ≥ 2.2.0 时间复杂度 $O(1)$ ACL类别 @read, @string, @fast 返回存储在 key 处的字符串值的长度。当 key 存储的值不是字符串类型时,则返回错误。 返回值返回一个整数: key 对应值的字符串长度; 如果 key 不存在,则返回 0。 示例 1返回键 user 存储的字符串的长度: 1234redis> SET user "JOHNSON LIN"OKredis> STRLEN user(integer) 11 示例 2键 nonexisting 不存在,STRLEN 操作返回 0: 1234redis> EXISTS nonexisting(integer) 0redis> STRLEN nonexisting(integer) 0 示例 3键 listkey 存储的值不是字符串类型,STRLEN 操作返回错误: 123456redis> RPUSH listkey "JOHNSON LIN"(integer)...
Redis SETRANGE 命令
语法1SETRANGE key offset value 可用版本 ≥ 2.2.0 时间复杂度 $O(1)$ 不包含复制新字符串的时间。通常情况下,这个字符串非常小,所以摊销后的复杂度是 $O(1)$。否则,复杂度是 $O(M)$,M 是字符串参数 value 的长度。 ACL类别 @write, @string, @slow 用字符串参数 value 覆盖存储在 key 上的字符串的一部分,覆盖的位置从偏移量 offset 开始。 例如,存储在键 user 原来的字符串值为 Johnson,现在用字符串 LIN 替换该字符串值从偏移量 4 开始之后的所有字符,覆盖后最终的字符串值为 JohnLIN: 12345678redis> SET user "Johnson"OKredis> GET user"Johnson"redis> SETRANGE user 4 "LIN"(integer) 7redis> GET user"JohnLIN" 如果偏移量 offset...
Redis SETNX 命令
从 Redis 2.6.12 版本开始,此命令被标记为已废弃。在迁移或编写新的代码时,可以使用带有 NX 参数的 SET 命令替代。 语法1SETNX key value 可用版本 ≥ 1.0.0 时间复杂度 $O(1)$ ACL类别 @write, @string, @fast 如果 key 不存在,则将 key 设置为保存字符串值。在这种情况下,它等于 SET。当 key 已经存在时,则不执行任何操作。 SETNX 是 “SET if Not eXists” 的缩写。 返回值返回一个整数: 如果 key 被成功设置,则返回 1; 如果 key 没被设置,则返回 0 示例123456redis> SETNX john "JOHNSON"(integer) 1redis> SETNX john "JOHNSON LIN"(integer) 0redis> GET john"JOHNSON" (END)
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 不存在,则返回...