1、通用命令
通用命令特指那些对数据类型没有要求的命令。下面学习一下常用的通用命令。
- keys
格式:KEYS pattern(pattern 为正则表达式)
功能:查找所有符合给定模式 pattern 的 key
时间复杂度:O(N), N 为数据库中 key 的数量。
在生产环境中,使用keys命令取出所有key并没有什么意义,而且Redis是单线程应用,如果Redis中存的key很多,使用keys命令会阻塞其他命令执行,所以keys命令一般不在生产环境中使用
-
DBSIZE
格式:DBSIZE
功能:返回当前数据库的 key 的数量。
时间复杂度:O(1)。Redis内置一个计数器,可以实时更新Redis中key的总数,因此dbsize的时间复杂度为O(1),可以在线上使用。
-
EXISTS
格式:EXISTS key
功能:检查给定 key 是否存在。若 key 存在,返回 1 ,否则返回 0 。
时间复杂度:O(1)
-
DEL
格式: DEL key [key …]
功能: 删除给定的一个或多个 key 。不存在的 key 会被忽略。返回值是被删除 key 的数量。
时间复杂度: O(N), N 为被删除的 key 的数量,其中删除单个字符串类型的 key ,时间复杂度为O(1);删除单个列表、集合、有序集合或哈希表类型的 key ,时间复杂度为O(M), M 为以上数据结构内的元素数量。
-
EXPIRE
格式: EXPIRE key seconds
功能: 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。设置成功返回 1 。 当 key 不存在或者不能为 key 设置生存时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的生存时间),返回 0 。
时间复杂度: O(1)
-
TTL
格式: TTL key
功能: 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。当key不存在时,返回-2,当key没有设置过期时间时,返回-1,正常情况返回剩余秒数。
时间复杂度: O(1)
在上图中已经体现了,不在重复贴图。
- PERSIST
格式: PERSIST key
功能: 移除给定 key 的生存时间,将这个 key 从“易失的”(带生存时间 key )转换成“持久的”(一个不带生存时间、永不过期的 key )。当生存时间移除成功时,返回 1 . 如果 key 不存在或 key 没有设置生存时间,返回 0 。
时间复杂度: O(1)
- TYPE
格式: TYPE key
功能: 返回 key 所储存的值的类型。
时间复杂度: O(1)
值的类型有:
- none (key不存在)
- string (字符串)
- list (列表)
- set (集合)
- zset (有序集)
- hash (哈希表)
- stream (流)。是Redis 5.0 引入的一种新数据类型。
-
DEL
格式: DEL key [key …]
功能: 删除给定的一个或多个 key 。不存在的 key 会被忽略。返回值是被删除 key 的数量。
时间复杂度: O(N), N 为被删除的 key 的数量,其中删除单个字符串类型的 key ,时间复杂度为O(1);删除单个列表、集合、有序集合或哈希表类型的 key ,时间复杂度为O(M), M 为以上数据结构内的元素数量。
-
SCAN
格式: SCAN cursor [MATCH pattern] [LIMT count]
功能: 查找(limit个)(符合给定模式 pattern )的 key ,返回值是符合 条件的key。scan命令是为了优化keys命令,具体区别后续单独分析。scan 参数提供了三个参数,第⼀个是 cursor 整数值,第⼆个是key 的正则模式,第三个是遍历的limit。第⼀次遍历时,cursor 值为 0,然后将返回结果中第⼀个整数值作为下⼀次遍历的cursor。⼀直遍历到返回的 cursor 值为 0 时结束。
时间复杂度: 增量式迭代命令每次执行的复杂度为 O(1) , 对数据集进行一次完整迭代的复杂度为 O(N) , 其中 N 为数据集中的元素数量。
-
查看数据内部编码
查看内部编码的命令:object encoding key。
-
EXISTS
格式: EXISTS key
功能: 检查给定 key 是否存在。
时间复杂度: O(1)
返回值: 若 key 存在,返回 1 ,否则返回 0 。
2、字符串 命令
-
SET
格式: SET key value [EX seconds] [PX milliseconds] [NX|XX]
功能: 将字符串值 value 关联到 key 。如果 key 已经持有其他值, SET 就覆写旧值, 无视类型。当 SET 命令对一个带有生存时间(TTL)的键进行设置之后, 该键原有的 TTL 将被清除。
时间复杂度: O(1)
参数: 从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:- EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。
- PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。
- NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value 。否则返回 nil。
- XX : 只在键已经存在时, 才对键进行设置操作。否则返回 nil。
返回值: 在 Redis 2.6.12 版本以前, SET 命令总是返回 OK 。从 Redis 2.6.12 版本开始, SET 命令只在设置操作成功完成时才返回 OK ; 如果命令使用了 NX 或者 XX 选项, 但是因为条件没达到而造成设置操作未执行, 那么命令将返回空批量回复(NULL Bulk Reply)。
-
SETNX
格式: SETNX key value
功能: 只在键 key 不存在的情况下, 将键 key 的值设置为 value 。若键 key 已经存在, 则 SETNX 命令不做任何动作。返回nil。SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。
时间复杂度: O(1)
返回值: 命令在设置成功时返回 1 , 设置失败时返回 0 。 -
SETEX
格式: SETEX key seconds value
功能: 将键 key 的值设置为 value , 并将键 key 的生存时间设置为 seconds 秒钟。如果键 key 已经存在, 那么 SETEX 命令将覆盖已有的值。
时间复杂度: O(1)
返回值: 命令在设置成功时返回 OK 。 当 seconds 参数不合法时, 命令将返回一个错误。 -
PSETEX
格式: PSETEX key milliseconds value
功能: 这个命令和 SETEX 命令相似, 但它以毫秒为单位设置 key 的生存时间, 而不是像 SETEX 命令那样以秒为单位进行设置。
时间复杂度: O(1)
返回值: 命令在设置成功时返回 OK 。 当 seconds 参数不合法时, 命令将返回一个错误。 -
GET
格式: GET key
功能: 返回与键 key 相关联的字符串值。
时间复杂度: O(1)
返回值: 如果键 key 不存在, 那么返回特殊值 nil ; 否则, 返回键 key 的值。如果键 key 的值并非字符串类型, 那么返回一个错误, 因为 GET 命令只能用于字符串值。
-
GETSET
格式: GETSET key value
功能: 将键 key 的值设为 value , 并返回键 key 在被设置之前的旧值。
时间复杂度: O(1)
返回值: 返回给定键 key 的旧值。如果键 key 没有旧值, 也即是说, 键 key 在被设置之前并不存在, 那么命令返回 nil 。当键 key 存在但不是字符串类型时, 命令返回一个错误。 -
STRLEN
格式: STRLEN key
功能: 返回键 key 储存的字符串值的长度。
时间复杂度: O(1)
返回值: STRLEN 命令返回字符串值的长度。当键 key 不存在时, 命令返回 0 。当 key 储存的不是字符串值时, 返回一个错误。
-
APPEND
格式: APPEND key value
功能: 返回键 key 储存的字符串值的长度。
时间复杂度: 平摊O(1)
返回值: 追加 value 之后, 键 key 的值的长度。 -
SETRANGE
格式: SETRANGE key offset value
功能: 从偏移量 offset 开始, 用 value 参数覆写(overwrite)键 key 储存的字符串值。不存在的键 key 当作空白字符串处理。
时间复杂度: 对于长度较短的字符串,命令的平摊复杂度O(1);对于长度较大的字符串,命令的复杂度为 O(M) ,其中 M 为 value 的长度。
返回值: SETRANGE 命令会返回被修改之后, 字符串值的长度。
SETRANGE 命令会确保字符串足够长以便将 value 设置到指定的偏移量上, 如果键 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ), 那么原字符和偏移量之间的空白将用零字节(zerobytes, “\x00” )进行填充。
因为 Redis 字符串的大小被限制在 512 兆(megabytes)以内, 所以用户能够使用的最大偏移量为 2^29-1(536870911) , 如果你需要使用比这更大的空间, 请使用多个 key 。
当生成一个很长的字符串时, Redis 需要分配内存空间, 该操作有时候可能会造成服务器阻塞(block)。 在2010年出产的Macbook Pro上, 设置偏移量为 536870911(512MB 内存分配)将耗费约 300 毫秒, 设置偏移量为 134217728(128MB 内存分配)将耗费约 80 毫秒, 设置偏移量 33554432(32MB 内存分配)将耗费约 30 毫秒, 设置偏移量为 8388608(8MB 内存分配)将耗费约 8 毫秒。
- GETRANGE
格式: GETRANGE key start end
功能: 返回键 key 储存的字符串值的指定部分, 字符串的截取范围由 start 和 end 两个偏移量决定 (包括 start 和 end 在内)。
时间复杂度: O(N),其中 N 为被返回的字符串的长度。
返回值: GETRANGE 命令会返回字符串值的指定部分。
负数偏移量表示从字符串的末尾开始计数, -1 表示最后一个字符, -2 表示倒数第二个字符, 以此类推。
GETRANGE 通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
GETRANGE 命令在 Redis 2.0 之前的版本里面被称为 SUBSTR 命令。
- INCR
格式: INCR key
功能: 为键 key 储存的数字值加上一。如果键 key 不存在, 那么它的值会先被初始化为 0 , 然后再执行 INCR 命令。如果键 key 储存的值不能被解释为数字, 那么 INCR 命令将返回一个错误。
时间复杂度: O(1)
返回值: INCR 命令会返回键 key 在执行加一操作之后的值。
INCR 命令是一个针对字符串的操作。 因为 Redis 并没有专用的整数类型, 所以键 key 储存的值在执行 INCR 命令时会被解释为十进制 64 位有符号整数。本操作的值限制在 64 位(bit)有符号数字表示之内。
- INCRBY
格式: INCRBY key increment
功能: 为键 key 储存的数字值加上增量 increment ,其中increment可以为负数。如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 INCRBY 命令。如果键 key 储存的值不能被解释为数字, 那么 INCRBY 命令将返回一个错误。
时间复杂度: O(1)
返回值: 在加上增量 increment 之后, 键 key 当前的值。
- INCRBYFLOAT
格式: INCRBYFLOAT key increment
功能: 为键 key 储存的值加上浮点数增量 increment 。如果键 key 不存在, 那么 INCRBYFLOAT 会先将键 key 的值设为 0 , 然后再执行加法操作。如果命令执行成功, 那么键 key 的值会被更新为执行加法计算之后的新值, 并且新值会以字符串的形式返回给调用者。
时间复杂度: O(1)
返回值: 在加上增量 increment 之后, 键 key 的值。
无论是键 key 的值还是增量 increment , 都可以使用像 2.0e7 、 3e5 、 90e-2 那样的指数符号(exponential notation)来表示, 但是, 执行 INCRBYFLOAT 命令之后的值总是以同样的形式储存, 也即是, 它们总是由一个数字, 一个(可选的)小数点和一个任意长度的小数部分组成(比如 3.14 、 69.768 ,诸如此类), 小数部分尾随的 0 会被移除, 如果可能的话, 命令还会将浮点数转换为整数(比如 3.0 会被保存成 3 )。
此外, 无论加法计算所得的浮点数的实际精度有多长, INCRBYFLOAT 命令的计算结果最多只保留小数点的后十七位。
当以下任意一个条件发生时, 命令返回一个错误:
键 key 的值不是字符串类型(因为 Redis 中的数字和浮点数都以字符串的形式保存,所以它们都属于字符串类型);
键 key 当前的值或者给定的增量 increment 不能被解释(parse)为双精度浮点数。
-
DECR
格式: DECR key
功能: 为键 key 储存的数字值减去一。如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 DECR 操作。如果键 key 储存的值不能被解释为数字, 那么 DECR 命令将返回一个错误。
时间复杂度: O(1)
返回值: DECR 命令会返回键 key 在执行减一操作之后的值。 -
DECRBY
格式: DECRBY key decrement
功能: 将键 key 储存的整数值减去减量 decrement 。如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 DECRBY 命令。如果键 key 储存的值不能被解释为数字, 那么 DECRBY 命令将返回一个错误。
时间复杂度: O(1)
返回值: DECRBY 命令会返回键在执行减法操作之后的值。
-
MSET
格式: MSET key value [key value …]
功能: 同时为多个键设置值。如果某个给定键已经存在, 那么 MSET 将使用新值去覆盖旧值, 如果这不是你所希望的效果, 请考虑使用 MSETNX 命令, 这个命令只会在所有给定键都不存在的情况下进行设置。MSET 是一个原子性(atomic)操作, 所有给定键都会在同一时间内被设置, 不会出现某些键被设置了但是另一些键没有被设置的情况。
时间复杂度: O(N),其中 N 为被设置的键数量。
返回值: MSET 命令总是返回 OK 。 -
MSETNX
格式: MSETNX key value [key value …]
功能: 当且仅当所有给定键都不存在时, 为所有给定键设置值。即使只有一个给定键已经存在, MSETNX 命令也会拒绝执行对所有键的设置操作。MSETNX 是一个原子性(atomic)操作, 所有给定键要么就全部都被设置, 要么就全部都不设置, 不可能出现第三种状态。
时间复杂度: O(N),其中 N 为被设置的键数量。
返回值: 当所有给定键都设置成功时, 命令返回 1 ; 如果因为某个给定键已经存在而导致设置未能成功执行, 那么命令返回 0 。
-
MGET
格式: MGET key [key …]
功能: 返回给定的一个或多个字符串键的值。如果给定的字符串键里面, 有某个键不存在, 那么这个键的值将以特殊值 nil 表示。
时间复杂度: O(N),其中 N 为被设置的键数量。
返回值: MGET 命令将返回一个列表, 列表中包含了所有给定键的值。
参考
1、《Redis命令参考-String》
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68864.html