首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Redis】​​Redis必学指南:最常用核心通用命令,除了GET与SET,你还知道那些?

【Redis】​​Redis必学指南:最常用核心通用命令,除了GET与SET,你还知道那些?

作者头像
用户11288949
发布2025-07-22 08:37:06
发布2025-07-22 08:37:06
2750
举报
文章被收录于专栏:学习学习

📚️前言 🌟 本期我们将全面深入地讲解Redis中最常用的通用命令,帮助开发者更好地掌握Redis的核心操作。无论是初学者还是经验丰富的开发者,都能从本文中获得实用的Redis使用技巧。 💡 更多前沿技术分享、实战案例和深度解析,欢迎访问我的技术博客:GGBondlctrl-CSDN博客。博客持续更新Redis、分布式系统、数据库优化等热门技术内容,每周至少发布2篇干货文章。 👍 您的每一次点赞、收藏和分享,都是对我持续创作的最大动力。如果您觉得本文对您有帮助,别忘了给文章点个赞哦! 🚀 让我们直接进入正题,开始探索Redis强大的通用命令世界。本文将从基础命令介绍到高级用法,涵盖KEYSTYPEDELEXISTS等核心命令的实际应用场景和最佳实践。

📚️1. 官方文档

在学习任何开源工具的时候,一般来说查看官方文档是比较重要的一个种方式;

在官方文档中,对于很多命令都有解释,但是小编这期只会讲解一下比较通用的命令;

中文官网:redis命令手册

📚️2.get与set

get:根据我们的key来获取value

set:把key与value存储进去

redis是按照键值对的方式进行存储数据的 存储中的set与key都是字符串

但是这里的数据结构确实是字符串,但是在redis内部的编码方式来说,这里的数据机构可能不是字符串,小编下期会进行讲解

具体实现方式:

代码语言:javascript
复制
set key1 value1

那么我们可以尝试进行get这个key1的值,具体的实现方式:

代码语言:javascript
复制
get key1

如下图所示:

如果此时我们获取的key是不存在的,那么此时返回的就是nil,如下图所示:

这里的nil就是与我们的null代表的意思基本是一致的~~~

是不是很简单,可以发现,在redis中的get与set就像是我们java中的哈希表一样的操作,十分简单

📚️3.Redis全局命令

🚀3.1value的类型

redis支持很多的数据结构,整体来说redis是键值对结构,但是这里支持的很多的数据结构,这里指的就是value,本身来说key一直都是string;

key 是一个固定的字符串标识符,用于唯一标识 Redis 数据库中的某个数据项。value 则可以是多种不同的数据结构类型,每种类型都有其特定的用途和操作方式。

其中类型如下所示:

字符串 哈希表 列表 集合 有序集合

操作不同数据结构,会有不同的命令;

🚀3.2keys命令

keys用来查询当前服务器上匹配的key,通过一些特殊符号(通配符)来描述key的模样,匹配上述模样的key就会被查询出来;

具体的命令操作:

代码语言:javascript
复制
keys pattern

pattern:包含特殊符号的字符串,存在的意义就是去描述另外的字符串长什么样子(筛选字符串的时候)

支持的通配符如下所示:

?匹配一个字符 *匹配一个0-个或者多个任意字符 [ac]匹配ae,别的不可以进行匹配 [^e]排除E,只有E不可以进行匹配 [a-b]匹配A到B这个范围内的字符,是闭区间

具体的操作如下所示:

首先我们先设置几个键值对:

然后一一进行操作

“ ? ”统配符:keys h?llo

如下所示:

返回的key如上所示,可以发现?只匹配一个字符

“ * ”通配符:keys h*llo

如下所示:

其他的方式,大家可以自己去试一试,都是比较简单的命令

keys的时间复杂度是O(N)

在生产环境上,一般不建议使用KEYS *命令来查询Redis中所有的key。这主要是因为Redis采用单线程架构的设计特点:

  1. 性能影响
  • KEYS *命令会扫描整个Redis数据库的所有key
  • 对于大型数据库(比如包含数百万key),这个操作可能需要消耗数秒甚至更长时间
  • 在此期间,Redis服务器会被完全阻塞,无法处理其他任何客户端请求
  1. 典型后果
  • 线上服务出现明显的性能下降或超时
  • 可能导致连接池耗尽
  • 对于高并发系统可能引发连锁故障

redis用于缓存,但在mysql前面,万一redis被keys阻塞了,此时其他的redis操作就超时,这些请求就会直接查询数据库~~~ mysql本来查询就慢,就会导致mysql挂了~~~

🚀3.3exists命令

exists判断key是否存在,使用命令如下:

exists key / [key...]

返回值:key存在的个数

时间复杂度:1(但是几个key就是几,并非通常意义下的O(N))

实现方式如下图所示:

当然我们也可以写成如下所示的命令:

一次判定两个keys,与分两次来进行判定

客户端和服务器之间通过网络来进行通信,一次请求,获取一次响应

分开的写法会产生更多轮次的网络通信

在网络编程中,采用分开的写法(如多次独立的请求/响应交互)会导致以下几个显著的性能问题:

  1. 通信轮次增加:
  • 每次网络交互都需要完整的请求-响应周期
  • 举例:一个查询操作如果分拆为3个独立请求,就需要3次完整的网络往返
  1. 网络通信效率问题:
  • 每次通信都需要TCP/IP协议栈的完整处理流程
  • 包括建立连接、传输数据、确认接收等步骤 ”).split("\n"))

🚀3.4del命令

删除指定的key

可以一次删除一个或者多个,返回就是删除几个,若不存在key,不会报错

del key [key...]

删除一个key就是O(1),多个key就是多个(N)

具体的命令实现如下图所示:

🚀3.5expire命令

expire作用是指定key设置过期时间

key存活时间超过指定的值,就会自动删除

expire key second

时间复杂度O(1)

0:设置失败 1:设置成功

设定过期时间,必须针对已经存在的key设置

就可以发现,我们设置key为hello的过期时间是10秒,然后在十秒内进行获取key是可以获取到的,但是在十秒之外获取到的key就是nil了,说明这里的key已经过期了~~~

🚀3.6ttl命令

ttl:time to live

网络原理,IP协议报头中就有一个字段TTL(但是TTL不是用时间衡量的,而是用次数)

TTL key

返回值:剩余过期时间 -1:没有关联过期时间 -2表示key不存在

这里我们可以搭配我们的expire命令进行使用,具体操作如下所示:

可以发现此时的时间秒数在不断减少,直到key过期后,再次进行ttl就是-2,表示key不存在了

🚀3.7type命令

返回key对应的数据类型

此处返回的就是key对应的value的类型

时间复杂度是O(1)

type key

lpush key2 111 222 333lpush例如链表的头插法,此时后面的value的类型就是list

sadd key3 111 222 333:类型为set

hset key4 field1 :类型为hash

如下所示:

其他的小编不再过多的进行演示了~~~

📚️4.redis的key的过期策略

一个redis中同时存在很多key,这些key大部分都有过期时间,redis咋知道哪些key已经过期要被删除,哪些key没有过期

🚀4.1定期删除

此时也需要结合定期删除的操作 每次抽取一部分进行验证过期时间,保证抽取检查的过程足够快

为啥对定期删除的时间有明确的要求呢?

😀:因为redis是单线程程序,主要的任务(处理每个命令任务)如果扫描过期key消耗的时间太多了,可能导致正常处理请求命令被阻塞了

🚀4.2惰性删除

假设key已经到了过期时间了,但是暂时还没有会进行删除操作,key还存在,但后面正好用到这个key进行访问; 那么这次访问就会让redis服务器触发删除key的操作,同时返回一个nil

虽然有两种策略结合,但是整体的效果一般~~~

任然可能会有很多过期的key残留了,没有及时删除

redis对上述进行补充,提供了内存淘汰机制(这里小编还没有具体进行了解)

🚀4.3其他删除方式(背道而驰)

定时器(多线程与redis单线程背驰)

1.基于优先级队列实现

把这些key加入到一个优先级队列,指定优先级规则,那么对队=首就是最快过期的key

扫描线程,不需要遍历,只需要扫描队首元素即可

并且扫描线程的频次不能过高,可以设置等待时间(节省CPU开销)在时间到了或者新的任务添加再次进行唤醒即可

2.基于时间轮实现

把时间划分成很多小段~~(划分的粒度,看实际需求)

尝试执行意义就是:防止时间过长,导致不同时间任务重复在一个格子中

对于时间轮来说,每个格子是多少时间,一共多少格子,都是根据实际场景灵活进行调配的~~

并且在redis原码中,比较核心的机制就是事件循环,与时间轮的方式类似

注意:上述的实现方式基于多线程方式,与redis的单线程方式背道而驰,只是一种思想

📚️5.总结

Redis通用命令详解:掌握核心操作与最佳实践

本文系统介绍了Redis最常用的通用命令,包括SET/GET基础操作、高级命令如KEYS(慎用)、EXISTS、DEL、EXPIRE/TTL以及TYPE等。重点剖析了KEYS命令在生产环境的使用风险,以及Redis的两种关键过期策略:定期删除和惰性删除的协同工作机制。文章还探讨了键值类型识别和多键批量操作技巧,为开发者提供了Redis数据管理的实用指南。通过理解这些核心命令和底层机制,开发者可以更高效地使用Redis进行数据存储和缓存管理。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📚️1. 官方文档
  • 📚️2.get与set
  • 📚️3.Redis全局命令
    • 🚀3.1value的类型
    • 🚀3.2keys命令
    • 🚀3.3exists命令
    • 🚀3.4del命令
    • 🚀3.5expire命令
    • 🚀3.6ttl命令
    • 🚀3.7type命令
  • 📚️4.redis的key的过期策略
    • 🚀4.1定期删除
    • 🚀4.2惰性删除
    • 🚀4.3其他删除方式(背道而驰)
      • 1.基于优先级队列实现
      • 2.基于时间轮实现
  • 📚️5.总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档