当前位置: 首页 > backend >正文

Redis常用命令表格汇总(超精炼)

文章目录

  • 前言
  • 一、全局命令
      • 说明:
  • 二、String类型相关
      • 说明:
  • 三、Hash类型
      • 说明:
  • 四、List类型
      • 说明:
  • 五、Set类型
      • 说明:
  • 六、Zset类型
      • 说明:

前言

Redis相关命令是学习Redis的基础。它有助于我们使用客户端,比如Jedis和RedisTemplate,又或者C++的RedisPlusPlus,去操作执行Redis相关命令。但是Redis命令还是非常多的,死记硬背不现实,最重要的还是多用,用的多了,自然就记住了。

先说明,Redis中下标从0开始,并且输入的下标支持负数指定的区间也都是闭区间,这和我们之前学的编程语言有所不同。
比如区间[0,-3]意思是0到倒数第3个下标的位置。
[0,-1]则>表示区间0到倒数第一个下标的区间,这样就达到查询整个list的效果。

一、全局命令

以下是Redis常用的全局命令,以表格形式列出,包括命令、作用及时间复杂度:

命令作用时间复杂度
KEYS pattern查找所有符合给定模式(pattern)的keyO(N),N为键总数
DEL key [key ...]删除一个或多个指定的keyO(N),N为操作的键数
EXISTS key [key ...]检查给定key是否存在O(1)
EXPIRE key seconds为key设置过期时间(以秒为单位)O(1)
TTL key返回key的剩余生存时间(以秒为单位),-1表示无过期时间,-2表示key不存在O(1)
PERSIST key移除key的过期时间,使其永久有效O(1)
RENAME key newkey将key重命名为newkeyO(1)
TYPE key返回key所存储的数据类型(如string、list、set等)O(1)
DBSIZE返回当前数据库的key总数O(1)
FLUSHDB清空当前数据库的所有keyO(N),N为键总数
FLUSHALL清空所有数据库的所有keyO(N),N为所有键总数
SELECT db切换到指定的数据库(db为0到配置的最大数据库数)O(1)
PING检查服务器是否运行,返回PONGO(1)
INFO [section]获取服务器的详细信息(如内存、客户端、持久化等)O(1)
CONFIG GET parameter获取指定配置参数的值O(1)
CONFIG SET parameter value修改指定配置参数的值O(1)

说明:

  1. 注意事项
    • KEYS命令在键数量较多时可能导致性能问题,在数据规模太大的时候不建议使用。如果必须遍历每一个Key建议用Scan,下文会介绍到。

二、String类型相关

以下是Redis中String类型的常用命令,以表格形式列举,包括命令、作用和时间复杂度:

命令作用时间复杂度
SET key value设置指定key的值O(1)
GET key获取指定key的值O(1)
SETNX key value仅当key不存在时设置key的值(N是不的意思,X代表exists存在的缩写)O(1)
SETEX key seconds value设置key的值并指定过期时间(秒)O(1)
PSETEX key milliseconds value设置key的值并指定过期时间(毫秒)O(1)
MSET key1 value1 [key2 value2 ...]同时设置多个key-value对O(N),N为键数量
MGET key1 [key2 ...]获取多个key的值O(N),N为键数量
INCR key将key的值加1(仅对整数有效)O(1)
INCRBY key increment将key的值增加指定整数值O(1)
DECR key将key的值减1(仅对整数有效)O(1)
DECRBY key decrement将key的值减少指定整数值O(1)
APPEND key value将指定值追加到key的现有值后O(1)
STRLEN key返回key值的字符串长度O(1)
GETSET key value设置key的新值并返回旧值O(1)
EXISTS key检查指定key是否存在O(1)
DEL key删除指定keyO(1)
EXPIRE key seconds设置key的过期时间(秒)O(1)
TTL key返回key的剩余生存时间(秒)O(1)

说明:

  1. 时间复杂度:大多数String操作的时间复杂度为O(1),因为Redis的底层数据结构(如哈希表)支持高效的键值访问。涉及多个键的命令(如MSET、MGET)复杂度与键数量成正比。

  2. 适用场景:String类型适合存储简单的键值对,如计数器、会话数据、缓存内容等。

  3. 注意事项

    • INCR/DECR系列命令要求值是可解析的整数,否则会报错。
    • SETNX常用于分布式锁实现。
    • EXPIRE和TTL用于管理键的生命周期。
  4. 表格解释: [key] 的意思是这个选项可以选,也可以不选。[key ...]表示可以写多个key,后面出现类似的形容不再过多赘述。


三、Hash类型

redis中Hash类型顾名思义,在逻辑上存储键值对,和HashTable是类似的。但是底层实现会更复杂。

命令作用时间复杂度
HSET key field value将哈希表key中的字段field的值设为valueO(1)
HGET key field获取哈希表key中字段field的值O(1)
HMSET key field1 value1 [field2 value2 ...]同时设置多个field-value对到哈希表key中O(N),N为设置的字段数
HMGET key field1 [field2 ...]获取哈希表key中指定字段的值O(N),N为请求的字段数
HGETALL key获取哈希表key中所有字段和值O(N),N为哈希表中的字段总数
HDEL key field1 [field2 ...]删除哈希表key中的一个或多个字段O(N),N为删除的字段数
HLEN key获取哈希表key中字段的数量O(1)
HEXISTS key field检查哈希表key中是否存在字段fieldO(1)
HKEYS key获取哈希表key中的所有字段O(N),N为哈希表中的字段总数
HVALS key获取哈希表key中的所有值O(N),N为哈希表中的字段总数
HINCRBY key field increment将哈希表key中字段field的值增加increment,返回最终计算的值O(1)
HINCRBYFLOAT key field increment将哈希表key中字段field的值增加浮点数increment,返回最终计算的值O(1)
HSETNX key field value仅当字段field不存在时,设置其值为valueO(1)

说明:

  1. 时间复杂度:O(1)表示常数时间复杂度,O(N)表示与操作的字段数或哈希表大小成正比。
  2. 注意事项HMSET在Redis 4.0.0及以上版本中被标记为过时,推荐使用HSET替代;HGETALL在数据量大时需谨慎使用,可能影响性能。

如果需要更详细的解释或示例,请告诉我!


四、List类型

redis中List类型更像是双端队列,也就是头进头出、尾进尾出。

命令作用时间复杂度
LPUSH key value [value ...]将一个或多个值插入到列表头部O(1)
RPUSH key value [value ...]将一个或多个值插入到列表尾部O(1)
LPOP key移除并返回列表头部的元素O(1)
RPOP key移除并返回列表尾部的元素O(1)
LLEN key返回列表的长度O(1)
LRANGE key start stop返回列表中区间[start,stop]内的元素O(S+N),S为起始偏移量,N为区间元素数量
LINDEX key index返回列表中指定索引的元素,类似于arr[index]这种操作O(N),N为索引位置
LSET key index value将列表中index下标的元素设置为指定值valueO(N),N为索引位置
LREM key count value把列表中值为value的元素删除count个O(N),N为列表长度
LTRIM key start stop修剪列表,只保留区间[start,stop]中的元素,其他删除O(N),N为被移除的元素数量
LINSERT key BEFORE|AFTER pivot value在指定元素前或后插入新元素O(N),N为列表长度
BLPOP key [key ...] timeout阻塞式弹出列表头部元素,若无元素则等待timeout秒,timeout可以是小数O(1)
BRPOP key [key ...] timeout阻塞式弹出列表尾部元素,若无元素则等待timeout秒,timeout可以是小数O(1)
RPOPLPUSH source destination从源列表尾部弹出元素并插入到目标列表头部O(1)
BRPOPLPUSH source destination timeout阻塞式从源列表尾部弹出元素并插入到目标列表头部O(1)

说明:

  1. 时间复杂度

    • 大部分头部或尾部操作(如LPUSHRPOP)为O(1),因为Redis的List是基于双向链表实现的。
    • 涉及中间元素或遍历的操作(如LINDEXLREM)通常为O(N),因为需要遍历链表。
    • LRANGE的复杂度取决于起始偏移量和返回元素数量。
  2. 阻塞命令(如BLPOPBRPOP)适用于需要等待数据的场景,常见于消息队列实现。

  3. LREM key count value 此命令如果当前list中值为value的元素个数不足count,不会报错,只会删除所有值为value的元素。如果list中值为value的元素个数大于count,这个命令会从左到右,依次删除值为value的元素,直到删除了count个为止。


五、Set类型

redis中Set类型是不可重复元素集合

命令作用时间复杂度
SADD key member [member ...]向集合添加一个或多个成员O(1)
SCARD key返回集合的基数(成员数量)O(1)
SDIFF key [key ...]返回第一个集合与其他集合的差集O(N),N 为所有集合的总成员数
SDIFFSTORE destination key [key ...]将差集结果存储到目标集合O(N),N 为所有集合的总成员数
SINTER key [key ...]返回所有集合的交集O(N*M),N 为最小集合的基数,M 为集合数量
SINTERSTORE destination key [key ...]将交集结果存储到目标集合destination中O(N*M),N 为最小集合的基数,M 为集合数量
SISMEMBER key member判断成员是否在集合中O(1)
SMEMBERS key返回集合key中的所有成员O(N),N 为集合的基数
SMOVE source destination member将成员member从源集合source移动到目标集合 destinationO(1)
SPOP key [count]随机移除并返回集合中count个成员( c o u n t ≥ 0 count \geq 0 count0 ,否则报错,但是大于key的基数不会报错)O(1)
SRANDMEMBER key [count]随机返回集合中count个成员,不移除O(1)
SREM key member [member ...]移除集合中指定成员O(N),N 为移除的成员数
SUNION key [key ...]返回所有集合的并集O(N),N 为所有集合的总成员数
SUNIONSTORE destination key [key ...]将并集结果存储到目标集合destination中O(N),N 为所有集合的总成员数
SSCAN key cursor [MATCH pattern] [COUNT count]增量迭代集合中的成员O(1) 每次迭代,整体 O(N)

说明:

  1. SSCAN key cursor [MATCH pattern] [COUNT count] 用于大数据量集合的迭代,它会批量遍历,减少延迟。
    • cursor 是一个字符串(都是数字并且随机),初次遍历从"0"开始。
    • pattern 是匹配模式,比如why*why 就会匹配whyEwhy、whyBabywhy等。
    • count 是需要查询的member数量。

      注意:
      这里count只是一个建议数量,实际redis服务器可能枚举count个,也可能枚举到count-1、count+1、count+2个。

    • 返回值 执行完这个命令会返回两部分内容,第一部分是cursor,下一次scan使用返回的cursor就会遍历其余为未遍历的内容。第二部分就是实际枚举到的members。

图例:
在这里插入图片描述


六、Zset类型

redis中Zset是有序的不可重复集合
既然有序,必然要根据一个指标去排序(Zset默认升序排序),因此存储一个元素时,需要给定这个元素一个score,Zset会根据这个元素的score进行排序
值得注意的是score是64位双精度浮点型数据(类似Java中的Double)

命令作用时间复杂度
ZADD key score member [score member ...]向有序集合添加一个或多个成员,或更新已存在成员的分数O(log(N)),N为有序集合的基数
ZREM key member [member ...]移除有序集合中的一个或多个成员O(M*log(N)),M为移除的成员数,N为有序集合的基数
ZSCORE key member返回有序集合中指定成员的分数O(1)
ZRANGE key start stop [WITHSCORES]返回有序集合中指定排名区间内的成员(按分数从小到大排序)O(log(N)+M),N为有序集合基数,M为返回的成员数
ZREVRANGE key start stop [WITHSCORES]返回有序集合中指定排名区间内的成员(按分数从大到小排序)O(log(N)+M),N为有序集合基数,M为返回的成员数
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]返回有序集合中分数在指定区间内的成员O(log(N)+M),N为有序集合基数,M为返回的成员数
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]返回有序集合中分数在指定区间内的成员(按分数从大到小排序)O(log(N)+M),N为有序集合基数,M为返回的成员数
ZCARD key返回有序集合的成员数量O(1)
ZCOUNT key min max返回有序集合中分数在指定区间内的成员数量O(log(N)),N为有序集合的基数
ZINCRBY key increment member将指定成员的分数增加incrementO(log(N)),N为有序集合的基数
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]计算多个有序集合的并集并存储到目标集合O(N)+O(M*log(M)),N为所有输入集合的总基数,M为结果集合的基数
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]计算多个有序集合的交集并存储到目标集合O(N)+O(M*log(M)),N为所有输入集合的总基数,M为结果集合的基数
ZRANK key member返回指定成员在有序集合中的排名(按分数从小到大)O(log(N)),N为有序集合的基数
ZREVRANK key member返回指定成员在有序集合中的排名(按分数从大到小)O(log(N)),N为有序集合的基数

说明:

  1. 在排序过程中,如果members的score都是一样的,会根据members的字典序进行排序。
  2. ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM\|MIN\|MAX]
    • 命令的理解
      想象这样一个场景,要创建一个文章热度排行榜这样一个有序集合。现在给你一个文章集合,里面有很多文章,每个文章都有浏览量、点赞数、收藏数、评论数等,你应该如何做呢?答案很简单,就是给每个文章的浏览数、点赞数等单一指标设定一一对应的系数weigh,每个指标乘以对应的系数,然后把这些处理后的指标进行统一相加或者相乘等处理(取决于AGGREGATE操作),获取一个综合指标;以综合指标对文章热度排行榜进行排序即可。命令中destination就是文章热度排行榜的集合,numkeys则是文章属性集合数量,key是存储所有文章浏览量的集合(member是文章名字、score是文章浏览量);weight则是文章某种属性对于热度占比的权重,比如浏览量可能占比因素大一点,给个0.9,收藏数可能占比小一点,给个0.1。 然后把系数乘上后,直接SUM求和,充当热度排行榜的score即可。这样一个热度排行的模型就建立完了。这也是Zset的一个应用场景。
    • destination 转存的目标集合
    • numkeys 源集合数量
    • key 某一个集合
    • WEIGHTS 每个集合中score乘以的系数大小,WEIGHTS 和score一样是64位双精度浮点型。
    • AGGREGATE keys中最终计算系数的score的计算规则,可以是sum(求和)、min(取最小值)、max(取最大值)。

http://www.xdnf.cn/news/4113.html

相关文章:

  • 【2025牛客五一集训派对day4 C】题解
  • 【学习笔记】机器学习(Machine Learning) | 第五章(3)| 分类与逻辑回归
  • Linux网络编程 day4
  • 「OC」源码学习——objc_class的bits成员探究
  • 五一作业-day02
  • 软件设计师-错题笔记-程序语言
  • 《Effective java》 第三版 核心笔记
  • 蓝桥杯嵌入式按键长短按移植
  • LeetCode:链表的中间结点
  • Linux的时间同步
  • HTTP/HTTPS协议(请求响应模型、状态码)
  • 1247: 彩色的棋子(chess)
  • 《Spring 中 @Autowired 注解详解》
  • 2023年408真题及答案
  • 读《人生道路的选择》有感
  • Day11 训练
  • 30天开发操作系统 第27天 -- LDT与库
  • Gateway网关:路由和鉴权
  • LeetCode 238:除自身以外数组的乘积(Java实现)
  • CRM客户关系管理系统高级版客户管理销售管理合同管理数据分析TP6.0框架源码
  • 阿里云服务器深度科普:技术架构与未来图景
  • kdump详解
  • 基于SRS实现流媒体服务器(最简单的流媒体服务器)
  • 【外围电路】0.介绍
  • react路由使用方法
  • 【ArUco boards】标定板检测
  • 《架构安全原则》解锁架构安全新密码
  • c++进阶——AVL树主要功能的模拟实现(附带旋转操作讲解)
  • ADK 第四篇 Runner 执行器
  • 把Android设备变成“国标摄像头”:GB28181移动终端实战接入指南