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

Redis 基本命令与操作全面解析:从入门到实战

前言

Redis 作为高性能内存数据库,其丰富的命令体系是发挥强大功能的基础。掌握 Redis 的基本命令,不仅能实现数据的高效读写,还能深入理解其内存模型与工作机制。本文将系统梳理 Redis 的核心命令,涵盖连接操作、键管理、数据类型操作、服务器管理等模块,结合详细代码示例与应用场景,帮助开发者快速掌握 Redis 的基础操作。


一、连接与基础配置命令

1. 客户端连接与认证

(1)启动 Redis 客户端

# 本地连接(默认端口6379)
redis-cli# 远程连接(指定IP和端口)
redis-cli -h 192.168.1.100 -p 6379

(2)密码认证(若配置了 requirepass)

127.0.0.1:6379> AUTH your_password
OK  # 认证成功

(3)测试连接可用性

127.0.0.1:6379> PING
PONG  # 连接正常

2. 服务器信息查询

# 获取服务器基础信息(版本、内存、客户端等)
127.0.0.1:6379> INFO
# 输出包含大量信息,可通过INFO <section>指定模块,如:
127.0.0.1:6379> INFO SERVER  # 仅服务器配置
127.0.0.1:6379> INFO MEMORY  # 仅内存统计

二、键(Key)操作命令

1. 键的查询与判断

(1)模糊查询键(谨慎在生产环境使用)

# 匹配所有以"user:"开头的键
127.0.0.1:6379> KEYS user:*
1) "user:1001"
2) "user:1002"# 通配符说明:
# * 匹配任意字符(0或多个)
# ? 匹配单个字符
# [abc] 匹配a、b、c中的任意一个

(2)判断键是否存在

127.0.0.1:6379> EXISTS user:1001
(integer) 1  # 存在返回1,不存在返回0

2. 键的生命周期管理

(1)设置过期时间(单位:秒)

# 为键设置10分钟过期(600秒)
127.0.0.1:6379> SET cache:data "value"
OK
127.0.0.1:6379> EXPIRE cache:data 600
(integer) 1  # 设置成功

(2)查看剩余过期时间

127.0.0.1:6379> TTL cache:data
(integer) 595  # 剩余秒数,-1表示永久有效,-2表示键不存在

(3)移除过期时间(转为永久有效)

127.0.0.1:6379> PERSIST cache:data
(integer) 1  # 移除成功

3. 键的删除与重命名

# 删除单个键(返回1表示成功,0表示键不存在)
127.0.0.1:6379> DEL user:1003
(integer) 1# 批量删除键(支持通配符,需配合UNLINK避免阻塞)
127.0.0.1:6379> DEL user:1001 user:1002
(integer) 2# 重命名键(若目标键存在则覆盖)
127.0.0.1:6379> RENAME old_key new_key
OK# 安全重命名(仅当目标键不存在时执行)
127.0.0.1:6379> RENAMENX old_key new_key
(integer) 1  # 成功则返回1,失败返回0

三、基础数据类型操作命令

1. String(字符串):最简单的键值对

(1)基础读写

# 设置值(覆盖已有值,NXX表示仅键不存在时设置,EX设置过期时间)
127.0.0.1:6379> SET key "value" NX EX 60
OK# 获取值(键不存在时返回nil)
127.0.0.1:6379> GET key
"value"# 批量设置/获取(减少网络IO)
127.0.0.1:6379> MSET k1 v1 k2 v2
OK
127.0.0.1:6379> MGET k1 k2
1) "v1"
2) "v2"

(2)数值操作(仅整数支持)

# 初始化为计数器
127.0.0.1:6379> SET counter 10
OK# 自增1(返回新值)
127.0.0.1:6379> INCR counter
(integer) 11# 按步长增减(支持负数)
127.0.0.1:6379> INCRBY counter 5  # 增加5,结果16
127.0.0.1:6379> DECRBY counter 3  # 减少3,结果13

2. List(列表):有序可重复的链表

(1)元素插入(头部 / 尾部)

# 左插入(头部添加,返回新长度)
127.0.0.1:6379> LPUSH list "b" "a"  # 结果:["a", "b"]
(integer) 2# 右插入(尾部添加)
127.0.0.1:6379> RPUSH list "c"     # 结果:["a", "b", "c"]
(integer) 3

(2)元素获取与删除

# 获取指定范围元素(0开始,-1表示最后一个)
127.0.0.1:6379> LRANGE list 0 -1
1) "a"
2) "b"
3) "c"# 左弹出/右弹出(删除并返回元素)
127.0.0.1:6379> LPOP list  # 返回"a",剩余["b", "c"]
127.0.0.1:6379> RPOP list  # 返回"c",剩余["b"]

3. Set(集合):无序唯一的哈希集合

(1)元素操作

# 添加元素(自动去重,返回新增数量)
127.0.0.1:6379> SADD set "a" "b" "a"
(integer) 2  # 实际新增2个元素# 判断元素是否存在
127.0.0.1:6379> SISMEMBER set "a"
(integer) 1  # 存在返回1,不存在返回0

(2)集合运算

# 创建两个集合
127.0.0.1:6379> SADD set1 "a" "b"
127.0.0.1:6379> SADD set2 "b" "c"# 并集(所有元素)
127.0.0.1:6379> SUNION set1 set2
1) "a"
2) "b"
3) "c"# 交集(共同元素)
127.0.0.1:6379> SINTER set1 set2
1) "b"

4. Hash(哈希):结构化数据存储

(1)字段操作

# 单个字段设置/获取
127.0.0.1:6379> HSET user id 1 name "Bob"
(integer) 2  # 成功设置2个字段
127.0.0.1:6379> HGET user name
"Bob"# 批量操作
127.0.0.1:6379> HMSET user age 30 email "bob@example.com"
OK
127.0.0.1:6379> HMGET user name email
1) "Bob"
2) "bob@example.com"

5. Sorted Set(有序集合):带分数的排序集合

(1)元素插入与排序查询

# 添加元素(score为排序依据)
127.0.0.1:6379> ZADD scores 85 "Alice" 90 "Bob"
(integer) 2# 按分数升序获取前2名(含分数)
127.0.0.1:6379> ZRANGE scores 0 1 WITHSCORES
1) "Alice"
2) "85"
3) "Bob"
4) "90"# 按分数降序获取(ZREVRANGE)
127.0.0.1:6379> ZREVRANGE scores 0 1 WITHSCORES
1) "Bob"
2) "90"
3) "Alice"
4) "85"

四、服务器与数据库管理命令

1. 数据库操作

# 查看当前数据库键的数量
127.0.0.1:6379> DBSIZE
(integer) 10# 切换数据库(默认16个数据库,编号0-15)
127.0.0.1:6379> SELECT 1
OK# 清空当前数据库(谨慎!)
127.0.0.1:6379> FLUSHDB
OK# 清空所有数据库(危险!)
127.0.0.1:6379> FLUSHALL
OK

2. 持久化控制

# 同步保存数据到磁盘(阻塞主线程,慎用)
127.0.0.1:6379> SAVE
OK# 异步保存(推荐,不阻塞)
127.0.0.1:6379> BGSAVE
Background saving started

3. 客户端管理

# 查看所有连接的客户端
127.0.0.1:6379> CLIENT LIST
id=1 addr=127.0.0.1:52345 fd=6 ...  # 显示客户端详细信息# 关闭指定客户端连接(根据id)
127.0.0.1:6379> CLIENT KILL addr:127.0.0.1:52345

五、进阶操作技巧

1. 原子性操作

Redis 的所有命令都是原子性的,支持通过MULTI+EXEC实现事务:

127.0.0.1:6379> MULTI  # 开启事务
OK
127.0.0.1:6379> INCR counter
QUEUED
127.0.0.1:6379> EXEC  # 执行所有入队命令
1) (integer) 14

2. 管道(Pipeline)优化

通过管道一次性发送多条命令,减少网络 IO 开销:

# 伪代码(Java示例)
try (Jedis jedis = new Jedis("localhost")) {Pipeline pipeline = jedis.pipelined();for (int i = 0; i < 1000; i++) {pipeline.set("key:" + i, "value:" + i);}pipeline.sync();  // 批量执行
}

六、命令对比与最佳实践

功能分类核心命令注意事项
连接与认证redis-cli, AUTH, PING, INFO生产环境禁用 KEYS 命令,改用 SCAN 避免阻塞
键操作KEYS, EXISTS, DEL, EXPIRE, TTLTTL 返回 - 2 表示键不存在,-1 表示永久有效
String 操作SET, GET, INCR, APPENDSET 支持 NXX/EX/NX 等参数实现原子锁
List 操作LPUSH, RPOP, LRANGE大数据量时避免 LRANGE 0 -1,改用分页或 SCAN
Set 操作SADD, SMEMBERS, SUNION集合运算结果可能占用大量内存,避免在生产环境直接返回全量数据
Hash 操作HSET, HGETALL, HDEL字段数较多时使用 HGETALL 可能导致性能问题,建议按需获取字段
服务器管理FLUSHDB, BGSAVE, CLIENT LISTFLUSHALL 会清空所有数据库,操作前务必确认

结语

Redis 的基本命令是掌握其核心功能的钥匙,从简单的键值读写到复杂的数据结构操作,每个命令都承载着特定的业务语义。开发者需根据场景选择合适的命令组合,同时注意生产环境中的性能与安全问题(如避免阻塞命令、合理设置过期时间)。通过不断实践与总结,可充分发挥 Redis 在缓存、队列、实时统计等场景中的优势,构建高效稳定的分布式系统。

希望本文能成为你学习 Redis 的实用手册,后续可深入研究 Redis 的高级特性(如持久化策略、集群部署、事务机制),进一步提升技术能力。

相关文章:

Redis 基本命令与操作全面解析:从入门到实战

前言 Redis 作为高性能内存数据库&#xff0c;其丰富的命令体系是发挥强大功能的基础。掌握 Redis 的基本命令&#xff0c;不仅能实现数据的高效读写&#xff0c;还能深入理解其内存模型与工作机制。本文将系统梳理 Redis 的核心命令&#xff0c;涵盖连接操作、键管理、数据类…...

数据库管理-第325期 ADG Failover后该做啥(20250513)

数据库管理325期 2025-05-13 数据库管理-第325期 ADG Failover后该做啥&#xff08;20250513&#xff09;1 故障处置2 恢复原主库3 其他操作总结 数据库管理-第325期 ADG Failover后该做啥&#xff08;20250513&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&a…...

SQLi-Labs 第21-24关

Less-21 http://127.0.0.1/sqli-labs/Less-21/ 1&#xff0c;抓个请求包看看 分析分析cookie被base64URL编码了&#xff0c;解码之后就是admin 2&#xff0c;那么这个网站的漏洞利用方式也是和Less-20关一样的&#xff0c;只是攻击语句要先base64编码&#xff0c;再URL编码&…...

Oracle — 数据管理

介绍 Oracle数据库作为全球领先的关系型数据库管理系统&#xff0c;其数据管理能力以高效性、安全性和智能化为核心。系统通过多维度技术实现海量数据的存储与实时处理&#xff0c;支持高并发事务操作与复杂分析查询&#xff0c;满足企业关键业务需求。在安全领域&#xff0c;O…...

在 Qt Creator 中为 QDockWidget 设置隐藏和显示按钮

在 Qt Creator 中为 QDockWidget 设置隐藏和显示按钮 是的&#xff0c;QDockWidget 内置了隐藏和显示的功能&#xff0c;可以通过以下几种方式实现&#xff1a; 1. 使用 QDockWidget 自带的关闭按钮 QDockWidget 默认带有一个关闭按钮&#xff0c;可以通过以下代码启用&…...

LS-NET-012-TCP的交互过程详解

LS-NET-012-TCP的交互过程详解 附加&#xff1a;TCP如何保障数据传输 TCP的交互过程详解 一、TCP协议核心交互流程 TCP协议通过三次握手建立连接、数据传输、四次挥手终止连接三大阶段实现可靠传输。整个过程通过序列号、确认应答、窗口控制等机制保障传输可靠性。 1.1 三次…...

每日算法刷题Day1 5.9:leetcode数组3道题,用时1h

1.LC寻找数组的中心索引(简单) 数组和字符串 - LeetBook - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 思想: 计算总和和左侧和&#xff0c;要让左侧和等于右侧和&#xff0c;即左侧和总和-左侧和-当前数字 代码 c代码: class Solution { public:i…...

解构认知边界:论万能方法的本体论批判与方法论重构——基于跨学科视阈的哲学-科学辩证

一、哲学维度的本体论批判 &#xff08;1&#xff09;理性主义的坍缩&#xff1a;从笛卡尔幻想到哥德尔陷阱 笛卡尔在《方法论》中构建的理性主义范式&#xff0c;企图通过"普遍怀疑-数学演绎"双重机制确立绝对方法体系。然而哥德尔不完备定理&#xff08;Gdel, 19…...

PVE WIN10直通无线网卡蓝牙

在 Proxmox VE (PVE) 中直通 Intel AC3165 无线网卡的 **蓝牙模块**&#xff08;通常属于 USB 设备&#xff0c;而非 PCIe 设备&#xff09;需要特殊处理&#xff0c;因为它的蓝牙部分通常通过 USB 连接&#xff0c;而 Wi-Fi 部分才是 PCIe 设备。以下是详细步骤&#xff1a; …...

第六节第二部分:抽象类的应用-模板方法设计模式

模板方法设计模式的写法 建议使用final关键字修饰模板方法 总结 代码&#xff1a; People(父类抽象类) package com.Abstract3; public abstract class People {/*设计模板方法设计模式* 1.定义一个模板方法出来*/public final void write(){System.out.println("\t\t\t…...

在另一个省发布抖音作品,IP属地会随之变化吗?

你是否曾有过这样的疑惑&#xff1a;出差旅游时在外地发布了一条抖音视频&#xff0c;评论区突然冒出“IP怎么显示xx省了&#xff1f;”的提问&#xff1f;随着各大社交平台上线“IP属地”功能&#xff0c;用户的地理位置标识成为公开信息&#xff0c;而属地显示的“灵敏性”也…...

卷积神经网络-从零开始构建一个卷积神经网络

目录 一、什么是卷积神经网络CNN 1.1、核心概念 1.2、卷积层 二、什么是卷积计算 2.1、卷积计算的例子: 2.2、点积 2.3、卷积与点积的关系 2.4、Padding(填充) 2.4.1、Padding的主要作用 1、控制输出特征图尺寸 2、保留边缘信息 3. 支持深层网络训练 2.4.2、Str…...

力扣-101.对称二叉树

题目描述 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 class Solution { public:bool check(TreeNode* p,TreeNode* q){if(!p&&!q)return true;if(!p&&q||!q&&p)return false;if(p->val!q->val)return false;return check(p…...

Tomcat和Nginx的主要区别

1、功能定位 Nginx&#xff1a;核心是高并发HTTP服务器和反向代理服务器&#xff0c;擅长处理静态资源&#xff08;如HTML、图片&#xff09;和负载均衡。Tomcat&#xff1a;是Java应用服务器&#xff0c;主要用于运行动态内容&#xff08;如JSP、Servlet&#xff09;&#xf…...

贪心算法:最小生成树

假设无向图为&#xff1a; A-B:1 A-C:3 B-C:1 B-D:4 C-D:1 C-E:5 D-E:6 一、使用Prim算法&#xff1a; public class Prim {//声明了两个静态常量&#xff0c;用于辅助 Prim 算法的实现private static final int V 5;//点数private static final int INF Integer.MA…...

uniapp-文件查找失败:‘@dcloudio/uni-ui/lib/uni-icons/uni-icons.vue‘

uniapp-文件查找失败&#xff1a;‘dcloudio/uni-ui/lib/uni-icons/uni-icons.vue’ 今天在HBuilderX中使用uniapp开发微信小程序时遇到了这个问题&#xff0c;就是找不到uni-ui组件 当时创建项目&#xff0c;选择了一个中间带的底部带选项卡模板&#xff0c;并没有选择内置u…...

Vue2.x 和 Vue3.x 对比-差异

Vue3的优点 diff算法的提升 vue2中的虚拟DOM是全量的对比&#xff0c;也就是不管是写死的还是动态节点都会一层层比较&#xff0c;浪费时间在静态节点上。 vue3新增静态标记&#xff08;patchflag &#xff09;&#xff0c;与之前虚拟节点对比&#xff0c;只对比带有patch fla…...

MacOS 用brew 安装、配置、启动Redis

MacOS 用brew 安装、配置、启动Redis 一、安装 brew install redis 二、启动 brew services start redis 三、用命令行检测 set name tom get name...

agentmain对业务的影响

前面一篇已经说了java agent技术主要有premain和agentmain两种形式&#xff0c;如果大部分业务已经在线上运行的话&#xff0c;不方便用premain的方式来实现&#xff0c;所以agentmain的方式是更加通用、灵活的 由于RASP是与用户业务运行在同一个jvm中的 &#xff0c;所以RASP…...

精益数据分析(56/126):创业阶段的划分与精益数据分析实践

精益数据分析&#xff08;56/126&#xff09;&#xff1a;创业阶段的划分与精益数据分析实践 在创业和数据分析的探索之旅中&#xff0c;理解创业阶段的划分以及与之对应的精益数据分析方法至关重要。今天&#xff0c;依旧怀揣着与大家共同进步的心态&#xff0c;深入研读《精…...

archlinux中挂载macOS的硬盘

问&#xff1a; 你好&#xff0c;我如何在archlinux中挂载macOS的硬盘呢&#xff1f;/dev/sda4 5344161792 7813773311 2469611520 1.2T Apple HFS/HFS AI回答&#xff1a; 你好&#xff01;在 Arch Linux 中挂载 macOS 的 HFS 或 HFS 硬盘&#xff08;例如 /dev/sda4&#x…...

JVM Optimization Learning(七)-GC

一、JVM Optimization 1、进程溢出调查 模拟 如何开启GC日志 如何开启GC日志 一般来说&#xff0c;JDK8及以下版本通过以下参数来开启GC日志&#xff1a; -XX:PrintGCDetails -XX:PrintGCDateStamps -Xloggc:gc.log如果是在JDK9及以上的版本&#xff0c;则格式略有不同&…...

uniapp小程序轮播图高度自适应优化详解

在微信小程序开发过程中&#xff0c;轮播图组件(swiper)是常用的UI元素&#xff0c;但在实际应用中经常遇到高度不匹配导致的空白问题。本文详细记录了一次轮播图高度优化的完整过程&#xff0c;特别是针对固定宽高比图片的精确适配方案。 问题背景 在开发"零工市场&quo…...

CSS从入门到精通:全面解析CSS核心知识体系

引言 CSS&#xff08;层叠样式表&#xff09;是前端开发的基石&#xff0c;掌握其核心知识能显著提升页面设计与布局能力。本文基于系统化学习资料&#xff0c;深入讲解CSS语法、选择器优先级、盒子模型、定位等核心概念&#xff0c;结合代码示例与实用技巧&#xff0c;助你从入…...

基于ESP32控制的机器人摄像头车

DIY Wi-Fi 控制的机器人摄像头车&#xff1a;从零开始的智能探索之旅 在当今科技飞速发展的时代&#xff0c;机器人技术已经逐渐走进了我们的生活。今天&#xff0c;我将带你一起探索如何制作一个 Wi-Fi 控制的机器人摄像头车&#xff0c;它不仅可以远程操控&#xff0c;还能通…...

基于STM32的LCD信号波形和FFT频谱显示

一、项目准备 主要利用LCD驱动中的画点和画连线函数&#xff0c;驱动是正点原子给我写好了的画点和画线的函数等些相关函数 void LCD_Draw_Circle(u16 x0,u16 y0,u8 r); //画圆 void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2); //画线 二、画波形图函数实…...

(9)被宏 QT_DEPRECATED_VERSION_X_6_0(“提示内容“) 修饰的函数,在 Qt6 中使用时,会被编译器提示该函数已过时

&#xff08;1&#xff09;起因是看到 Qt 的官方源代码里有这样的写法&#xff1a; #if QT_DEPRECATED_SINCE(6, 0) //里面的都是废弃的成员函数QT_WARNING_PUSHQT_WARNING_DISABLE_DEPRECATEDQT_DEPRECATED_VERSION_X_6_0("Use the constructor taking a QMetaType inst…...

关于mac配置hdc(鸿蒙)

关于mac配置hdc(鸿蒙) 在最开始配置的hdc -v时候老是出现格式不匹配 于是乎在网上找官网也不行&#xff0c;最后在csdn上找到了这篇文章Mac配置hdc才有的头绪 环境变量的问题 自己做一个简单的总结 首先在访达里面打开ide 打开之后输入下面的命令&#xff0c;一步一步的找…...

是 OpenCV 的 CUDA 模块中用于在 GPU 上对图像或矩阵进行转置操作函数cv::cuda::transpose

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::transpose 是 OpenCV 的 CUDA 模块中的一个函数&#xff0c;用于在 GPU 上对图像或矩阵进行转置操作&#xff08;Transpose&#xff0…...

SQL常用操作大全:复制表、跨库查询、删除重复数据

大家好&#xff0c;欢迎来到程序视点&#xff01;我是你们的老朋友.小二&#xff01; SQL常用操作精华总结 表结构与数据操作 复制表结构&#xff1a; SELECT * INTO b FROM a WHERE 1<>1 (SQL Server专用) SELECT TOP 0 * INTO b FROM a (更通用) 拷贝表数据&#…...