导图社区 Redis常用命令
redis常用命令总结,可以拿来即用,自学皆可,内容详细,全面,不断完善中,符串string操作命令 Redis中字符串类型常用命令: SETkey value 设置指定的key值 GETkey 获取指定key的值 SE... 哈希hash操作命令 Redis hash是一个string类型的field和value的映射表,hash特别适用于存储对象,常用命令: HSET...
编辑于2022-11-14 12:17:01 北京市"想炒股却看不懂术语?3分钟带你扫盲核心知识!本章涵盖股票入门必备常识:从基础概念(股票定义、发行方式)到关键指数(上证、纳斯达克等)解析股票类型(ST股、龙头股)与板块逻辑重点解读市盈率、市净率、涨幅振幅等指标含义揭秘多方空方博弈、诱多诱空陷阱说透分红送配、除权除息规则助你快速建立系统认知,告别盲目跟风!"
"想炒股却看不懂术语?3分钟带你扫盲核心知识!本章涵盖股票入门必备常识:从基础概念(股票定义、发行方式)到关键指数(上证、纳斯达克等)解析股票类型(ST股、龙头股)与板块逻辑重点解读市盈率、市净率、涨幅振幅等指标含义揭秘多方空方博弈、诱多诱空陷阱说透分红送配、除权除息规则助你快速建立系统认知,告别盲目跟风!"
《沧城》:一部滇西北小城的女性史诗。阿措以魔幻笔触剖开时代洪流中的封建枷锁,通过草乌酒、羊皮马具等核心意象,交织金凤闹离婚、水仙饮毒等荒诞抗争,展现女性在迷信与科学碰撞下的觉醒姿态。多线叙事中,文人陈敬先的画笔与斋姑娘的经幡共同撕开传统贞节观,而"女人如何活?跟天学"的标语则成为全书最尖锐的现实映射。云南人民出版社出品,用沧城这片微小切片,见证女性与命运死磕的壮烈与温情。
社区模板帮助中心,点此进入>>
"想炒股却看不懂术语?3分钟带你扫盲核心知识!本章涵盖股票入门必备常识:从基础概念(股票定义、发行方式)到关键指数(上证、纳斯达克等)解析股票类型(ST股、龙头股)与板块逻辑重点解读市盈率、市净率、涨幅振幅等指标含义揭秘多方空方博弈、诱多诱空陷阱说透分红送配、除权除息规则助你快速建立系统认知,告别盲目跟风!"
"想炒股却看不懂术语?3分钟带你扫盲核心知识!本章涵盖股票入门必备常识:从基础概念(股票定义、发行方式)到关键指数(上证、纳斯达克等)解析股票类型(ST股、龙头股)与板块逻辑重点解读市盈率、市净率、涨幅振幅等指标含义揭秘多方空方博弈、诱多诱空陷阱说透分红送配、除权除息规则助你快速建立系统认知,告别盲目跟风!"
《沧城》:一部滇西北小城的女性史诗。阿措以魔幻笔触剖开时代洪流中的封建枷锁,通过草乌酒、羊皮马具等核心意象,交织金凤闹离婚、水仙饮毒等荒诞抗争,展现女性在迷信与科学碰撞下的觉醒姿态。多线叙事中,文人陈敬先的画笔与斋姑娘的经幡共同撕开传统贞节观,而"女人如何活?跟天学"的标语则成为全书最尖锐的现实映射。云南人民出版社出品,用沧城这片微小切片,见证女性与命运死磕的壮烈与温情。
Redis常用命令
key(键)
DEL
删除给定的一个或多个 key 。
不存在的 key 会被忽略。
时间复杂度:
O(N), N 为被删除的 key 的数量。
删除单个字符串类型的 key ,时间复杂度为O(1)。
删除单个列表、集合、有序集合或哈希表类型的 key ,时间复杂度为O(M), M 为以上数据结构内的元素数量。
返回值:
被删除 key 的数量。
DUMP
序列化给定 key ,并返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键。
序列化生成的值有以下几个特点:
它带有 64 位的校验和,用于检测错误, RESTORE 在进行反序列化之前会先检查校验和。
值的编码格式和 RDB 文件保持一致。
RDB 版本会被编码在序列化值当中,如果因为 Redis 的版本不同造成 RDB 格式不兼容,那么 Redis 会拒绝对这个值进行反序列化操作。
序列化的值不包括任何生存时间信息。
时间复杂度:
查找给定键的复杂度为 O(1) ,对键进行序列化的复杂度为 O(N*M) ,其中 N 是构成 key 的 Redis 对象的数量,而 M 则是这些对象的平均大小。
如果序列化的对象是比较小的字符串,那么复杂度为 O(1) 。
返回值:
如果 key 不存在,那么返回 nil 。
否则,返回序列化之后的值。
EXISTS
检查给定 key 是否存在。
时间复杂度:O(1)
返回值:若 key 存在,返回 1 ,否则返回 0 。
EXPIRE
为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除
更新生存时间
可以对一个已经带有生存时间的 key 执行 EXPIRE 命令,新指定的生存时间会取代旧的生存时间
过期时间的精确度
在 Redis 2.4 版本中,过期时间的延迟在 1 秒钟之内 —— 也即是,就算 key 已经过期,但它还是可能在过期之后一秒钟之内被访问到,而在新的 Redis 2.6 版本中,延迟被降低到 1 毫秒之内
时间复杂度:O(1)
返回值:
设置成功返回 1
当 key 不存在或者不能为 key 设置生存时间时,返回 0
EXPIREAT
KEYS
KEYS pattern
查找所有符合给定模式 pattern 的 key
KEYS * 匹配数据库中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS h*llo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo
特殊符号用 \ 隔开
KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。
时间复杂度:
O(N), N 为数据库中 key 的
返回值:
符合给定模式的 key 列表
MIGRATE
将 key 原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功, key 保证会出现在目标实例上,而当前实例上的 key 会被删除
这个命令是一个原子操作,它在执行的时候会阻塞进行迁移的两个实例,直到以下任意结果发生:迁移成功,迁移失败,等到超时。 命令的内部实现是这样的:它在当前实例对给定 key 执行 DUMP 命令 ,将它序列化,然后传送到目标实例,目标实例再使用 RESTORE 对数据进行反序列化,并将反序列化所得的数据添加到数据库中;当前实例就像目标实例的客户端那样,只要看到 RESTORE 命令返回 OK ,它就会调用 DEL 删除自己数据库上的 key 。 timeout 参数以毫秒为格式,指定当前实例和目标实例进行沟通的最大间隔时间。这说明操作并不一定要在 timeout 毫秒内完成,只是说数据传送的时间不能超过这个 timeout 数。 MIGRATE 命令需要在给定的时间规定内完成 IO 操作。如果在传送数据时发生 IO 错误,或者达到了超时时间,那么命令会停止执行,并返回一个特殊的错误: IOERR 。 当 IOERR 出现时,有以下两种可能: key 可能存在于两个实例 key 可能只存在于当前实例 唯一不可能发生的情况就是丢失 key ,因此,如果一个客户端执行 MIGRATE 命令,并且不幸遇上 IOERR 错误,那么这个客户端唯一要做的就是检查自己数据库上的 key 是否已经被正确地删除。 如果有其他错误发生,那么 MIGRATE 保证 key 只会出现在当前实例中。(当然,目标实例的给定数据库上可能有和 key 同名的键,不过这和 MIGRATE 命令没有关系)。 可选项: COPY :不移除源实例上的 key 。 REPLACE :替换目标实例上已存在的 key 。
时间复杂度:
这个命令在源实例上实际执行 DUMP 命令和 DEL 命令,在目标实例执行 RESTORE 命令,查看以上命令的文档可以看到详细的复杂度说明
key 数据在两个实例之间传输的复杂度为 O(N)
返回值:
迁移成功时返回 OK ,否则返回相应的错误
MOVE
MOVE key db
将当前数据库的 key 移动到给定的数据库 db 当中
如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果
因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)
时间复杂度:O(1)
返回值:移动成功返回 1 ,失败则返回 0
OBJECT
OBJECT subcommand [arguments [arguments]]
OBJECT 命令允许从内部察看给定 key 的 Redis 对象
OBJECT 命令有多个子命令
OBJECT REFCOUNT <key> 返回给定 key 引用所储存的值的次数。此命令主要用于除错
OBJECT ENCODING <key> 返回给定 key 锁储存的值所使用的内部表示(representation)
OBJECT IDLETIME <key> 返回给定 key 自储存以来的空转时间(idle, 没有被读取也没有被写入),以秒为单位
对象可以以多种方式编码
假如你做了什么让 Redis 没办法再使用节省空间的编码时(比如将一个只有 1 个元素的集合扩展为一个有 100 万个元素的集合),特殊编码类型(specially encoded types)会自动转换成通用类型(general type)
字符串可以被编码为 raw (一般字符串)或 int (用字符串表示64位数字是为了节约空间)
列表可以被编码为 ziplist 或 linkedlist 。 ziplist 是为节约大小较小的列表空间而作的特殊表示
集合可以被编码为 intset 或者 hashtable 。 intset 是只储存数字的小集合的特殊表示
哈希表可以编码为 zipmap 或者 hashtable 。 zipmap 是小哈希表的特殊表示
有序集合可以被编码为 ziplist 或者 skiplist 格式。 ziplist 用于表示小的有序集合,而 skiplist 则用于表示任何大小的有序集合
时间复杂度:O(1)
返回值:
REFCOUNT 和 IDLETIME 返回数字
ENCODING 返回相应的编码类型
PERSIST
PERSIST key
移除给定 key 的生存时间,将这个 key 从『易失的』(带生存时间 key )转换成『持久的』(一个不带生存时间、永不过期的 key )
时间复杂度:O(1)
返回值:
当生存时间移除成功时,返回 1 .
如果 key 不存在或 key 没有设置生存时间,返回 0
PEXPIRE
PEXPIRE key milliseconds
这个命令和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位
时间复杂度:O(1)
返回值:
设置成功,返回 1
key 不存在或设置失败,返回 0
PEXPIREAT
PEXPIREAT key milliseconds-timestamp
这个命令和 EXPIREAT 命令类似,但它以毫秒为单位设置 key 的过期 unix 时间戳,而不是像 EXPIREAT 那样,以秒为单位
时间复杂度:O(1)
返回值:
如果生存时间设置成功,返回 1
当 key 不存在或没办法设置生存时间时,返回 0 。(查看 EXPIRE 命令获取更多信息)
PTTL
PTTL key
这个命令类似于 TTL 命令,但它以毫秒为单位返回 key 的剩余生存时间,而不是像 TTL 命令那样,以秒为单位
复杂度:O(1)
返回值:
当 key 不存在时,返回 -2
当 key 存在但没有设置剩余生存时间时,返回 -1
否则,以毫秒为单位,返回 key 的剩余生存时间
RANDOMKEY
从当前数据库中随机返回(不删除)一个 key
时间复杂度:O(1)
返回值:
当数据库不为空时,返回一个 key
当数据库为空时,返回 nil
RENAME
RENAME key newkey
将 key 改名为 newkey
当 key 和 newkey 相同,或者 key 不存在时,返回一个错误
当 newkey 已经存在时, RENAME 命令将覆盖旧值
时间复杂度:O(1)
返回值:改名成功时提示 OK ,失败时候返回一个错误
RENAMENX
RENAMENX key newkey
当且仅当 newkey 不存在时,将 key 改名为 newkey
当 key 不存在时,返回一个错误
时间复杂度:O(1)
返回值:
修改成功时,返回 1
如果 newkey 已经存在,返回 0
RESTORE
RESTORE key ttl serialized-value
反序列化给定的序列化值,并将它和给定的 key 关联
参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间
RESTORE 在执行反序列化之前会先对序列化值的 RDB 版本和数据校验和进行检查,如果 RDB 版本不相同或者数据不完整的话,那么 RESTORE 会拒绝进行反序列化,并返回一个错误
更多信息可以参考 DUMP 命令
时间复杂度:
查找给定键的复杂度为 O(1) ,对键进行反序列化的复杂度为 O(N*M) ,其中 N 是构成 key 的 Redis 对象的数量,而 M 则是这些对象的平均大小
有序集合(sorted set)的反序列化复杂度为 O(N*M*log(N)) ,因为有序集合每次插入的复杂度为 O(log(N))
如果反序列化的对象是比较小的字符串,那么复杂度为 O(1)
返回值:如果反序列化成功那么返回 OK ,否则返回一个错误
SORT
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]
返回或保存给定列表、集合、有序集合 key 中经过排序的元素
排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较
一般SORT用法
SORT key 返回键值从小到大排序的结果
SORT key DESC 返回键值从大到小排序的结果
使用 ALPHA 修饰符对字符串进行排序
因为 SORT 命令默认排序对象为数字, 当需要对字符串进行排序时, 需要显式地在 SORT 命令之后添加 ALPHA 修饰符
如果系统正确地设置了 LC_COLLATE 环境变量的话,Redis能识别 UTF-8 编码
使用 LIMIT 修饰符限制返回结果
排序之后返回元素的数量可以通过 LIMIT 修饰符进行限制
修饰符接受 offset 和 count 两个参数
offset 指定要跳过的元素数量
count 指定跳过 offset 个指定的元素之后,要返回多少个对象
使用外部 key 进行排序
使用外部 key 的数据作为权重,代替默认的直接对比键值的方式来进行排序
BY 选项
默认情况下, SORT uid 直接按 uid 中的值排序
通过使用 BY 选项,可以让 uid 按其他键的元素来排序 比如说, 以下代码让 uid 键按照 user_level_{uid} 的大小来排序: redis 127.0.0.1:6379> SORT uid BY user_level_* 1) "2" # jack , level = 10 2) "3" # peter, level = 25 3) "4" # mary, level = 70 4) "1" # admin, level = 9999 user_level_* 是一个占位符, 它先取出 uid 中的值, 然后再用这个值来查找相应的键。 比如在对 uid 列表进行排序时, 程序就会先取出 uid 的值 1 、 2 、 3 、 4 , 然后使用 user_level_1 、 user_level_2 、 user_level_3 和 user_level_4 的值作为排序 uid 的权重。
保存排序结果
默认情况下, SORT 操作只是简单地返回排序结果,并不进行任何保存操作
通过给 STORE 选项指定一个 key 参数,可以将排序结果保存到给定的键上
如果被指定的 key 已存在,那么原有的值将被排序结果覆盖
时间复杂度:
O(N+M*log(M)), N 为要排序的列表或集合内的元素数量, M 为要返回的元素数量。
如果只是使用 SORT 命令的 GET 选项获取数据而没有进行排序,时间复杂度 O(N)。
返回值:
没有使用 STORE 参数,返回列表形式的排序结果
使用 STORE 参数,返回排序结果的元素数量。
TTL
TTL key
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)
时间复杂度:O(1)
返回值:
当 key 不存在时,返回 -2
当 key 存在但没有设置剩余生存时间时,返回 -1
否则,以秒为单位,返回 key 的剩余生存时间。
TYPE
TYPE key :返回 key 所储存的值的类型
时间复杂度:O(1)
返回值:
none (key不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)
SCAN
SCAN cursor [MATCH pattern] [COUNT count]
SCAN 命令及其相关的 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements)
迭代
以上列出的四个命令都支持增量式迭代, 它们每次执行都只会返回少量元素, 所以这些命令可以用于生产环境, 而不会出现像 KEYS 命令、 SMEMBERS 命令带来的问题 —— 当 KEYS 命令被用于处理一个大的数据库时, 又或者 SMEMBERS 命令被用于处理一个大的集合键时, 它们可能会阻塞服务器达数秒之久。 不过, 增量式迭代命令也不是没有缺点的: 举个例子, 使用 SMEMBERS 命令可以返回集合键当前包含的所有元素, 但是对于 SCAN 这类增量式迭代命令来说, 因为在对键进行增量式迭代的过程中, 键可能会被修改, 所以增量式迭代命令只能对被返回的元素提供有限的保证 (offer limited guarantees about the returned elements)。
SCAN 命令用于迭代当前数据库中的数据库键。
SSCAN 命令用于迭代集合键中的元素。
HSCAN 命令用于迭代哈希键中的键值对。
ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。
注意
SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一个参数总是一个数据库键
而 SCAN 命令则不需要在第一个参数提供任何数据库键 —— 因为它迭代的是当前数据库中的所有数据库键