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

Redis 完整入门指南 | 零基础小白也能轻松掌握的缓存神器

📢 写在前面

如果你正在学习 Java 后端开发,你一定遇到过这些问题:

  • 数据库查询一多,页面加载就慢得像蜗牛🐌
  • 用户一多,服务器直接卡死甚至崩溃💥
  • 面试官问你 "缓存怎么做的?",你一脸懵逼😰

别慌!这些问题的背后,都指向同一个答案 ——Redis

本文专为编程零基础 / Java 后端初学者量身打造,从 "Redis 是什么" 到 "亲手敲命令操作",全程大白话 + 实操代码,保证你从零看懂、学完即用!

建议收藏 ⭐,反复练习!


📑 文章导航

表格

章节内容
Redis 是什么?
为什么要用 Redis?
Redis 核心特点
Redis 应用场景
Redis 安装部署(Windows + Linux)
五大基础数据类型详解
常用基础命令实操
全文总结 & 学习建议

一、Redis 是什么? 🤔

1.1 一句话定义

Redis(Remote Dictionary Server,远程字典服务)是一款开源的、基于内存的、键值对(Key-Value)结构的 NoSQL 数据库

拆开来理解:

  • 开源:免费使用,全世界开发者都在用
  • 基于内存:数据存在内存里,所以读写速度极快
  • 键值对:数据以key = value的形式存储,就像一本 "字典"
  • NoSQL:不是传统的关系型数据库(如 MySQL),不用写 SQL 语句

简单类比 🎯

如果把 MySQL 比作一个大型仓库(容量大但找东西慢),那 Redis 就是你桌面上的便签本(容量小但查找飞快)。你把最常用的信息贴在便签上,用的时候一眼就能看到,不用每次都跑去仓库翻找。

1.2 Redis vs MySQL 核心对比

很多新手分不清 Redis 和 MySQL 的区别,看这张表就够了:

表格

对比项MySQLRedis
数据存储位置磁盘(硬盘)内存(RAM)
读写速度较慢(毫秒级)极快(微秒级)
数据结构表格(行和列)键值对(Key-Value)
查询方式SQL 语句专用命令
数据量适合大量数据持久存储适合热点数据临时缓存
主要角色主数据库(存数据的 "家")缓存层(加速的 "助手")
是否支持持久化✅ 天然支持✅ 支持(需配置)

⚠️ 重点理解:Redis不是用来替代 MySQL 的,而是和 MySQL搭配使用。MySQL 负责存储全量数据,Redis 负责缓存高频访问的热点数据,两者


二、为什么要用 Redis? 💡

在回答 "为什么" 之前,我们先看一个真实场景

场景模拟 🎬

假设你开发了一个电商网站,首页需要展示热门商品列表

没有 Redis 时:

用户A访问首页 → 查询MySQL → 返回商品列表(耗时 200ms) 用户B访问首页 → 查询MySQL → 返回商品列表(耗时 200ms) 用户C访问首页 → 查询MySQL → 返回商品列表(耗时 200ms) ...... 1000个用户同时访问 → MySQL 疯狂查询 → 数据库扛不住 → 💥崩溃!

用了 Redis 之后:

第1次请求 → 查MySQL → 结果存入Redis缓存(耗时 200ms) 用户B访问 → 直接从Redis读取 → 返回结果(耗时 1ms)✅ 用户C访问 → 直接从Redis读取 → 返回结果(耗时 1ms)✅ ...... 1000个用户同时访问 → Redis轻松应对 → MySQL毫无压力 → 😎稳如老狗!

💡 核心原因:Redis 基于内存,读写速度是 MySQL 的几十倍甚至上百倍,能轻松扛住高并发请求,大幅减轻数据库压力。


用 Redis 的三大理由

表格

理由说明
🚀 速度快基于内存操作,官方数据:读写性能可达 10 万 + 次 / 秒
🛡️ 保护数据库作为缓存层拦截大量请求,避免 MySQL 被打垮
🧩 功能丰富不只是缓存,还能做消息队列、排行榜、分布式锁等

三、Redis 核心特点 ⭐

以下是 Redis 最核心的五大特点,面试常考,务必记住:

① 基于内存,速度极快 🚀

Redis 将所有数据存储在内存中,读写操作不需要磁盘 I/O,单机可达10 万 + QPS(每秒查询次数)。

② 支持数据持久化 💾

虽然数据在内存中,但 Redis 支持将数据定期保存到磁盘,即使服务器重启,数据也不会丢失。

主要两种持久化方式:RDB(快照)和AOF(日志追加),入门阶段了解即可,后续进阶再深入学习。

③ 支持多种数据类型 📦

不只是简单的字符串,Redis 支持5 种基础数据类型

  • String(字符串)
  • List(列表)
  • Set(集合)
  • Hash(哈希 / 散列)
  • Sorted Set / ZSet(有序集合)

④ 操作具有原子性 ⚛️

Redis 的单个命令都是原子操作(要么成功、要么失败,不会出现 "执行一半" 的情况),天然适合做计数器、分布式锁等场景。

⑤ 支持高并发与集群 🌐

Redis 天然支持主从复制、哨兵模式、集群模式,轻松应对大规模高并发


四、Redis 应用场景 🎯

Redis 在实际开发中用途非常广泛,以下是最常见的 6 大场景:

表格

场景说明用到的数据类型
🔥 热点数据缓存首页商品、热搜新闻等高频数据缓存String / Hash
👤 会话 (Session) 存储用户登录状态、Token 令牌存储String
🏆 排行榜游戏积分排名、商品销量排行ZSet
🔢 计数器文章阅读量、视频播放次数、点赞数String(INCR)
⚡ 秒杀 / 限流电商秒杀库存扣减、接口访问频率限制String / List
📨 消息队列(轻量级)简单的异步任务处理、通知推送List / Stream

💡 新手记忆技巧:只要你发现某个数据"读取频率高、变化频率低、对速度要求高",就可以考虑用 Redis 来缓存


五、Redis 安装部署 🛠️

⚠️ 说明:Redis 官方推荐在Linux环境下使用。Windows 版本是社区维护的非官方版本,仅建议学习使用。


5.1 Windows 安装(极简傻瓜版)✅

第一步:下载 Redis

前往 GitHub 下载 Windows 版 Redis:

🔗 下载地址:https://github.com/tporadowski/redis/releases

选择最新版本的.zip压缩包下载(如Redis-x64-5.0.14.1.zip

第二步:解压即用

将压缩包解压到任意目录(建议路径不含中文和空格),例如:

D:\Redis\

解压后目录结构如下:

D:\Redis\ ├── redis-server.exe ← Redis 服务端(启动服务) ├── redis-cli.exe ← Redis 客户端(输入命令) ├── redis.windows.conf ← 配置文件 └── ...其他文件

第三步:启动 Redis 服务

方式一:直接双击启动

双击redis-server.exe,看到如下界面说明启动成功

[28896] 01 Jan 2024 12:00:00.000 # Redis version=5.0.14.1, bits=64 [28896] 01 Jan 2024 12:00:00.000 # Running in standalone mode [28896] 01 Jan 2024 12:00:00.000 # Server initialized [28896] 01 Jan 2024 12:00:00.000 * Ready to accept connections

⚠️ 注意:这个窗口不能关闭!关闭就等于停止了 Redis 服务。

方式二:命令行启动(推荐)

打开 CMD,切换到 Redis 目录:

# 进入Redis所在目录 cd D:\Redis # 启动Redis服务(使用配置文件) redis-server.exe redis.windows.conf

第四步:连接测试

另开一个 CMD 窗口(注意:服务端窗口不要关),执行:

# 进入Redis目录 cd D:\Redis # 启动客户端连接 redis-cli.exe # 测试连接(输入ping,返回PONG就是成功) 127.0.0.1:6379> ping PONG

看到PONG就说明 Redis 安装成功,可以正常


🔧 常见问题排查

表格

问题解决方案
双击 redis-server 闪退用 CMD 启动,查看具体报错信息
端口 6379 被占用修改配置文件中port参数,或关闭占用端口的程序
提示找不到命令确认 CMD 已切换到 Redis 所在目录

5.2 Linux 安装(CentOS / Ubuntu)✅

CentOS 7为例,其他 Linux 发行版操作类似。

第一步:安装编译依赖

# 安装gcc编译器(Redis是C语言写的,需要编译) sudo yum install -y gcc make

Ubuntu 系统使用:sudo apt install -y gcc make

第二步:下载 Redis

# 进入软件下载目录 cd /usr/local/src # 下载Redis安装包(以7.2.4版本为例) wget https://download.redis.io/releases/redis-7.2.4.tar.gz # 解压 tar -xzf redis-7.2.4.tar.gz # 进入解压后的目录 cd redis-7.2.4

第三步:编译安装

# 编译 make # 安装到指定目录 make install PREFIX=/usr/local/redis

等待编译完成,出现Hint: It's a good idea to run 'make test'说明编译成功

第四步:配置 Redis

# 复制配置文件到安装目录 cp /usr/local/src/redis-7.2.4/redis.conf /usr/local/redis/ # 编辑配置文件 vi /usr/local/redis/redis.conf

修改以下关键配置:

# 允许后台运行(改为yes) daemonize yes # 允许远程连接(注释掉这一行,前面加#) # bind 127.0.0.1 -::1 # 设置访问密码(可选,建议设置) requirepass your_password_here # 关闭保护模式(如需远程访问) protected-mode no

⚠️ 新手提示:在 vi 编辑器中,按i进入编辑模式,修改后按Esc,输入:wq保存退出。

第五步:启动 Redis

# 使用配置文件启动 /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf # 检查是否启动成功 ps -ef | grep redis

看到 redis-server 进程说明启动成功

第六步:连接测试

# 启动客户端 /usr/local/redis/bin/redis-cli # 如果设置了密码,需要先认证 127.0.0.1:6379> auth your_password_here OK # 测试连接 127.0.0.1:6379> ping PONG

补充:常用管理命令

# 停止Redis服务 /usr/local/redis/bin/redis-cli shutdown # 查看Redis运行状态 /usr/local/redis/bin/redis-cli info # 设置开机自启(创建systemd服务文件) sudo vi /etc/systemd/system/redis.service

开机自启的服务文件内容:

[Unit] Description=Redis Server After=network.target [Service] ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf ExecStop=/usr/local/redis/bin/redis-cli shutdown Restart=always [Install] WantedBy=multi-user.target
# 启用开机自启 sudo systemctl enable redis sudo systemctl start redis<!-- 【配图位置⑦】:建议截图Linux终端中Redis编译成功、启动成功、ping测试PONG的完整过程 --> --- # 六、五大基础数据类型详解 📦 这是 Redis 最核心的知识点,**面试必问、开发必用**,一定要掌握<!-- 【配图位置⑧】:建议放一张五大数据类型的总览图,每个类型配一个小图标和一句话描述 --> --- ## 6.1 String(字符串)🔤 ### 是什么? Redis 中 **最基础、最常用** 的数据类型。一个 key 对应一个 value,value 可以是字符串、数字,**最大可存储 512MB** 数据。 ### 适用场景 - 缓存用户信息、商品信息 - 计数器(阅读量、点赞数) - Session 会话存储 - 分布式锁 ### 核心命令 ```bash # ========== 基础存取 ========== # SET:存值(设置键值对) 127.0.0.1:6379> SET name "张三" OK # GET:取值 127.0.0.1:6379> GET name "张三" # DEL:删除 127.0.0.1:6379> DEL name (integer) 1 # ========== 设置过期时间 ========== # SETEX:存值 + 设置过期时间(单位:秒) # 比如:验证码5分钟后过期 127.0.0.1:6379> SETEX verify_code 300 "886655" OK # TTL:查看剩余过期时间(-1表示永不过期,-2表示已过期/不存在) 127.0.0.1:6379> TTL verify_code (integer) 298 # ========== 数值操作(计数器)========== # SET 一个数值 127.0.0.1:6379> SET article:1001:views 0 OK # INCR:自增1(原子操作,天然线程安全!) 127.0.0.1:6379> INCR article:1001:views (integer) 1 127.0.0.1:6379> INCR article:1001:views (integer) 2 # INCRBY:自增指定数值 127.0.0.1:6379> INCRBY article:1001:views 10 (integer) 12 # DECR:自减1 127.0.0.1:6379> DECR article:1001:views (integer) 11 # ========== 批量操作 ========== # MSET:批量存值(一次存多个,效率更高) 127.0.0.1:6379> MSET name "李四" age "25" city "北京" OK # MGET:批量取值 127.0.0.1:6379> MGET name age city 1) "李四" 2) "25" 3) "北京" # ========== 其他常用 ========== # SETNX:只在key不存在时才设置(用于分布式锁) 127.0.0.1:6379> SETNX lock:order "locked" (integer) 1 ← 设置成功(key之前不存在) 127.0.0.1:6379> SETNX lock:order "locked" (integer) 0 ← 设置失败(key已存在) # STRLEN:获取字符串长度 127.0.0.1:6379> STRLEN name (integer) 6

💡 实用技巧:Redis 的 key 命名推荐使用冒号分隔的命名规范,如业务:对象:id:属性,例如user:1001:name,清晰又规范。


6.2 List(列表)📋

是什么?

有序、可重复的字符串列表,底层类似双向链表。可以从左边或右边插入和弹出元素。

大白话:就像排队一样,可以从队头或队尾加人、移人,而且允许重复排队。

适用场景

  • 消息队列(简单版)
  • 最新消息列表(朋友圈、微博 Timeline)
  • 文章评论列表

核心命令

# ========== 插入元素 ========== # LPUSH:从左边(头部)插入 127.0.0.1:6379> LPUSH news "新闻C" "新闻B" "新闻A" (integer) 3 # 此时列表:新闻A → 新闻B → 新闻C # RPUSH:从右边(尾部)插入 127.0.0.1:6379> RPUSH news "新闻D" (integer) 4 # 此时列表:新闻A → 新闻B → 新闻C → 新闻D # ========== 查看元素 ========== # LRANGE:查看指定范围的元素(0 -1 表示查看全部) 127.0.0.1:6379> LRANGE news 0 -1 1) "新闻A" 2) "新闻B" 3) "新闻C" 4) "新闻D" # LRANGE:查看前3条 127.0.0.1:6379> LRANGE news 0 2 1) "新闻A" 2) "新闻B" 3) "新闻C" # LINDEX:按索引取值(从0开始) 127.0.0.1:6379> LINDEX news 1 "新闻B" # LLEN:获取列表长度 127.0.0.1:6379> LLEN news (integer) 4 # ========== 弹出元素 ========== # LPOP:从左边弹出一个元素(取出并删除) 127.0.0.1:6379> LPOP news "新闻A" # RPOP:从右边弹出一个元素 127.0.0.1:6379> RPOP news "新闻D" # 查看剩余元素 127.0.0.1:6379> LRANGE news 0 -1 1) "新闻B" 2) "新闻C"

💡 应用示例:微博最新消息列表 —— 新消息用LPUSH从左边推入,用LRANGE 0 9取最新 10 条展示。


6.3 Set(集合)🎲

是什么?

无序、不可重复的字符串集合。自动去重!还支持集合间的交集、并集、差集运算。

大白话:像一个 "不允许放重复东西的袋子",而且袋子里的东西没有固定顺序。

适用场景

  • 标签系统(用户标签、文章标签)
  • 共同好友 / 共同关注
  • 抽奖活动(随机抽取)
  • 数据去重

核心命令

# ========== 基础操作 ========== # SADD:添加元素(自动去重) 127.0.0.1:6379> SADD tags "Java" "Redis" "MySQL" "Java" (integer) 3 ← 只成功添加了3个(Java重复了) # SMEMBERS:查看集合所有元素 127.0.0.1:6379> SMEMBERS tags 1) "Redis" 2) "MySQL" 3) "Java" # SCARD:获取集合元素个数 127.0.0.1:6379> SCARD tags (integer) 3 # SISMEMBER:判断元素是否在集合中(1=在,0=不在) 127.0.0.1:6379> SISMEMBER tags "Java" (integer) 1 127.0.0.1:6379> SISMEMBER tags "Python" (integer) 0 # SREM:移除指定元素 127.0.0.1:6379> SREM tags "MySQL" (integer) 1 # ========== 随机操作(抽奖场景)========== # SRANDMEMBER:随机取出元素(不删除) 127.0.0.1:6379> SRANDMEMBER tags 1 1) "Java" # SPOP:随机弹出元素(取出并删除,适合抽奖) 127.0.0.1:6379> SPOP tags 1 1) "Redis" # ========== 集合运算(共同好友场景)========== # 准备两个用户的关注列表 127.0.0.1:6379> SADD user:1:follow "张三" "李四" "王五" (integer) 3 127.0.0.1:6379> SADD user:2:follow "李四" "王五" "赵六" (integer) 3 # SINTER:交集(共同关注) 127.0.0.1:6379> SINTER user:1:follow user:2:follow 1) "李四" 2) "王五" # SUNION:并集(所有关注的人) 127.0.0.1:6379> SUNION user:1:follow user:2:follow 1) "张三" 2) "李四" 3) "王五" 4) "赵六" # SDIFF:差集(我关注了但对方没关注的) 127.0.0.1:6379> SDIFF user:1:follow user:2:follow 1) "张三"

6.4 Hash(哈希)#️⃣

是什么?

一个 key 对应一个"字段 - 值" 的映射表,特别适合存储对象

大白话:如果 String 是 "一个抽屉放一样东西",那 Hash 就是 "一个抽屉里分了好几个格子,每个格子放不同东西"。

适用场景

  • 存储对象信息(用户信息、商品信息)—— 最核心的用途
  • 购物车

核心命令

# ========== 存储用户信息 ========== # HSET:设置hash中某个字段的值 127.0.0.1:6379> HSET user:1001 name "张三" (integer) 1 127.0.0.1:6379> HSET user:1001 age "25" (integer) 1 127.0.0.1:6379> HSET user:1001 city "深圳" (integer) 1 # 也可以一次性设置多个字段 127.0.0.1:6379> HSET user:1002 name "李四" age "28" city "北京" (integer) 3 # ========== 读取信息 ========== # HGET:获取某个字段的值 127.0.0.1:6379> HGET user:1001 name "张三" # HMGET:批量获取多个字段 127.0.0.1:6379> HMGET user:1001 name age city 1) "张三" 2) "25" 3) "深圳" # HGETALL:获取所有字段和值 127.0.0.1:6379> HGETALL user:1001 1) "name" 2) "张三" 3) "age" 4) "25" 5) "city" 6) "深圳" # HKEYS:获取所有字段名 127.0.0.1:6379> HKEYS user:1001 1) "name" 2) "age" 3) "city" # HVALS:获取所有字段值 127.0.0.1:6379> HVALS user:1001 1) "张三" 2) "25" 3) "深圳" # ========== 其他操作 ========== # HDEL:删除某个字段 127.0.0.1:6379> HDEL user:1001 city (integer) 1 # HEXISTS:判断字段是否存在 127.0.0.1:6379> HEXISTS user:1001 name (integer) 1 # HLEN:获取字段数量 127.0.0.1:6379> HLEN user:1001 (integer) 2 # HINCRBY:字段值自增(适合购物车数量增减) 127.0.0.1:6379> HSET cart:user1001 item:2001 1 (integer) 1 127.0.0.1:6379> HINCRBY cart:user1001 item:2001 2 (integer) 3 ← 商品数量变为3

💡 Hash vs String 存对象的区别

  • String存对象需要将整个对象序列化为 JSON,修改某个字段需要取出→反序列化→修改→序列化→存回
  • Hash可以单独修改某个字段,更灵活、更节省网络开销
  • 建议:存储对象信息优先使用Hash

6.5 ZSet / Sorted Set(有序集合)🏆

是什么?

和 Set 类似(不可重复),但每个元素都关联一个分数(score),Redis 会按照分数自动排序

大白话:就像考试成绩单,每个同学有一个分数,自动按分数从低到高排列。

适用场景

  • 排行榜(游戏积分、商品销量、热搜榜)—— 最经典的场景
  • 带权重的消息队列
  • 延迟队列

核心命令

# ========== 构建游戏积分排行榜 ========== # ZADD:添加元素及分数 127.0.0.1:6379> ZADD game:rank 1500 "玩家A" (integer) 1 127.0.0.1:6379> ZADD game:rank 2800 "玩家B" (integer) 1 127.0.0.1:6379> ZADD game:rank 2200 "玩家C" (integer) 1 127.0.0.1:6379> ZADD game:rank 3500 "玩家D" (integer) 1 127.0.0.1:6379> ZADD game:rank 1800 "玩家E" (integer) 1 # ========== 查看排行 ========== # ZRANGE:按分数从低到高排列(升序) 127.0.0.1:6379> ZRANGE game:rank 0 -1 1) "玩家A" 2) "玩家E" 3) "玩家C" 4) "玩家B" 5) "玩家D" # ZREVRANGE:按分数从高到低排列(降序)—— 排行榜常用! 127.0.0.1:6379> ZREVRANGE game:rank 0 -1 1) "玩家D" 2) "玩家B" 3) "玩家C" 4) "玩家E" 5) "玩家A" # WITHSCORES:连同分数一起显示 127.0.0.1:6379> ZREVRANGE game:rank 0 2 WITHSCORES 1) "玩家D" 2) "3500" 3) "玩家B" 4) "2800" 5) "玩家C" 6) "2200" # ========== 查询与修改 ========== # ZSCORE:查看某个成员的分数 127.0.0.1:6379> ZSCORE game:rank "玩家B" "2800" # ZRANK:查看成员排名(升序排名,从0开始) 127.0.0.1:6379> ZRANK game:rank "玩家D" (integer) 4 ← 升序中排第5位(索引4) # ZREVRANK:查看成员排名(降序排名,从0开始) 127.0.0.1:6379> ZREVRANK game:rank "玩家D" (integer) 0 ← 降序中排第1位(索引0) # ZINCRBY:给成员增加分数 127.0.0.1:6379> ZINCRBY game:rank 500 "玩家A" "2000" ← 玩家A分数从1500变为2000 # ZCARD:获取集合元素总数 127.0.0.1:6379> ZCARD game:rank (integer) 5 # ZREM:移除成员 127.0.0.1:6379> ZREM game:rank "玩家E" (integer) 1 # ZCOUNT:统计指定分数范围内的元素个数 127.0.0.1:6379> ZCOUNT game:rank 2000 3000 (integer) 2 ← 分数在2000~3000之间有2个玩家

🔑 五大数据类型速查对比表

表格

类型特点典型场景记忆口诀
String最简单,一个 key 一个 value缓存、计数器、Session万能型
List有序、可重复、双向操作消息列表、时间线排队型
Set无序、不重复、集合运算标签、去重、共同好友去重型
Hash字段 - 值映射、适合存对象用户信息、购物车对象型
ZSet不重复、有分数、自动排序排行榜、延迟队列排名型

七、常用基础命令实操 ⌨️

除了各数据类型的专属命令,Redis 还有一些通用命令,操作所有类型的 key 都能用。


7.1 Key(键)通用管理命令

# ========== 查看Key ========== # KEYS pattern:查找匹配的key(*表示所有) 127.0.0.1:6379> KEYS * 1) "name" 2) "user:1001" 3) "game:rank" # KEYS user*:查找以user开头的key 127.0.0.1:6379> KEYS user* 1) "user:1001" 2) "user:1002" # EXISTS:判断key是否存在(1=存在,0=不存在) 127.0.0.1:6379> EXISTS name (integer) 1 # TYPE:查看key的数据类型 127.0.0.1:6379> TYPE name string 127.0.0.1:6379> TYPE game:rank zset # ========== 删除Key ========== # DEL:删除一个或多个key 127.0.0.1:6379> DEL name (integer) 1 # DEL:批量删除 127.0.0.1:6379> DEL key1 key2 key3 (integer) 3 # UNLINK:异步删除(大key时推荐,不阻塞服务器) 127.0.0.1:6379> UNLINK big_key (integer) 1 # ========== 重命名 ========== # RENAME:重命名key 127.0.0.1:6379> SET old_name "hello" OK 127.0.0.1:6379> RENAME old_name new_name OK 127.0.0.1:6379> GET new_name "hello"

⚠️ 注意:在生产环境中,禁止使用KEYS *命令!当数据量很大时,这个命令会阻塞Redis 服务器。可使用SCAN命令代替。


7.2 过期时间相关命令

# ========== 设置过期时间 ========== # EXPIRE:给已存在的key设置过期时间(单位:秒) 127.0.0.1:6379> SET token "abc123" OK 127.0.0.1:6379> EXPIRE token 3600 (integer) 1 ← 设置成功,3600秒(1小时)后自动删除 # PEXPIRE:设置过期时间(单位:毫秒) 127.0.0.1:6379> PEXPIRE token 60000 (integer) 1 ← 60000毫秒(60秒)后过期 # SETEX:SET + EXPIRE 二合一(推荐!) 127.0.0.1:6379> SETEX session:user1001 1800 "session_data_xxx" OK ← 设置值并同时指定1800秒过期 # ========== 查看过期时间 ========== # TTL:查看剩余过期时间(单位:秒) 127.0.0.1:6379> TTL token (integer) 3540 # 返回值说明: # 正数 → 剩余秒数 # -1 → 永不过期(没设置过期时间) # -2 → key不存在或已过期 # PTTL:查看剩余过期时间(单位:毫秒) 127.0.0.1:6379> PTTL token (integer) 3540000 # ========== 取消过期时间 ========== # PERSIST:移除过期时间,使key变为永久有效 127.0.0.1:6379> PERSIST token (integer) 1 127.0.0.1:6379> TTL token (integer) -1 ← 变成永不过期

7.3 数据库切换命令

Redis 默认有16 个数据库(编号 0~15),默认使用0 号库

# SELECT:切换数据库 127.0.0.1:6379> SELECT 1 OK 127.0.0.1:6379[1]> ← 注意提示符变了,表示当前在1号库 127.0.0.1:6379[1]> SELECT 0 OK 127.0.0.1:6379> ← 回到0号库 # DBSIZE:查看当前库的key数量 127.0.0.1:6379> DBSIZE (integer) 5 # FLUSHDB:清空当前库(⚠️危险操作!) 127.0.0.1:6379> FLUSHDB OK # FLUSHALL:清空所有库(⚠️极度危险!生产环境严禁使用!) 127.0.0.1:6379> FLUSHALL OK

⚠️ 严重警告FLUSHDBFLUSHALL不可逆操作,数据删除后无法恢复!学习时可以随便玩,工作中千万别用!


7.4 服务器信息命令

# INFO:查看Redis服务器信息 127.0.0.1:6379> INFO # 会返回大量信息,包括版本、内存使用、客户端连接数等 # INFO memory:只看内存信息 127.0.0.1:6379> INFO memory # used_memory_human:1.52M ← 当前使用了1.52MB内存 # CONFIG GET *:查看所有配置 127.0.0.1:6379> CONFIG GET maxmemory 1) "maxmemory" 2) "0" ← 0表示无上限 # SAVE:手动触发持久化(将内存数据保存到磁盘) 127.0.0.1:6379> SAVE OK

7.5 命令速查表 📝

表格

命令说明示例
SET key value存值SET name "张三"
GET key取值GET name
DEL key删除DEL name
EXISTS key判断是否存在EXISTS name
KEYS pattern查找 keyKEYS user*
TYPE key查看类型TYPE name
EXPIRE key seconds设置过期时间EXPIRE name 60
TTL key查看剩余时间TTL name
PERSIST key取消过期PERSIST name
SELECT index切换数据库SELECT 1
DBSIZE当前库 key 数量DBSIZE
FLUSHDB清空当前库FLUSHDB
PING测试连接PINGPONG

八、全文总结 & 学习建议 📚

8.1 本文知识点回顾

恭喜你看到这里!🎉 让我们快速回顾一下本文的核心知识点

Redis 是什么:开源的、基于内存的、键值对 NoSQL 数据库

为什么用:速度快、抗高并发、保护数据库、功能丰富

核心特点:内存存储、支持持久化、多数据类型、原子操作、支持集群

应用场景:缓存、Session、排行榜、计数器、秒杀、消息队列

安装部署:Windows 解压即用、Linux 编译安装,启动后pingPONG验证

五大数据类型

  • String→ 万能型(缓存、计数器)
  • List→ 排队型(消息列表)
  • Set→ 去重型(标签、共同好友)
  • Hash→ 对象型(用户信息)
  • ZSet→ 排名型(排行榜)

通用命令:KEYS、EXISTS、DEL、EXPIRE、TTL、SELECT、TYPE 等


8.2 新手入门学习建议

🎯 当前阶段你应该做到:

  1. 理解 Redis 是什么,能向别人解释清楚
  2. 在本机成功安装并启动Redis
  3. 熟练使用五大数据类型的基础命令
  4. 了解 Redis 的应用场景,知道什么时候该用 Redis

🚀 后续进阶学习路线:

学完本文基础后,建议按照以下路线继续深入:

第一阶段(巩固基础) └── 在 Java 项目中集成 Redis(Spring Boot + Spring Data Redis / Jedis / Lettuce) └── 练习在真实项目中使用缓存 第二阶段(核心进阶) └── Redis 持久化机制详解(RDB vs AOF) └── Redis 过期策略 & 内存淘汰策略 └── Redis 事务与 Lua 脚本 第三阶段(高频面试) └── 缓存穿透、缓存击穿、缓存雪崩(原理 + 解决方案) └── Redis 分布式锁实现 └── Redis 与数据库双写一致性 第四阶段(架构进阶) └── Redis 主从复制 └── Redis 哨兵模式(Sentinel) └── Redis Cluster 集群 └── Redis 性能优化与监控

📖 推荐学习资源:

表格

资源类型推荐内容
官方文档https://redis.io/docs/(最权威)
在线练习https://try.redis.io/(在线敲命令)
可视化工具Another Redis Desktop Manager(推荐,免费好用)
经典书籍《Redis 设计与实现》—— 进阶阶段必读

🎁 最后的话

Redis 是 Java 后端开发者的必备技能,无论是日常开发还是面试,Redis 的出场率都极高。

但不要贪多求快,先把基础打牢,能在项目中正确使用 Redis 做缓存,再逐步深入底层原理和高级特性。

记住:多敲命令 > 多看理论。打开你的 redis-cli,把本文的每个命令都亲手敲一遍,比看十遍文章都管用!


📝如果这篇文章对你有帮助,请点赞 👍 收藏 ⭐ 关注,你的支持是我持续创作的动力!

💬有问题欢迎评论区留言,我会逐一回复!


本文作者原创,首发于 CSDN,转载请注明出处。

http://www.cnnetsun.cn/news/1589123.html

相关文章:

  • Windows APK安装新方案:告别模拟器,实现Android应用原生运行
  • Masa Mods汉化资源包:让中文玩家无障碍体验Minecraft模组生态
  • 从零理解自然数系统:用Python类模拟皮亚诺公理(含加法乘法实现)
  • RK3588开发基础
  • 基因集(模块)活性量化:R语言+Java原生
  • ZEMAX实例解析:施密特—卡塞格林系统的多项式非球面优化与MTF分析
  • 手把手教你配置PUSCH repetition type A跳频:Intra-slot与Inter-slot参数设置详解(含RB位置计算器)
  • Python实战:用SymPy解常微分方程 vs 偏微分方程的5个关键差异
  • Flutter Isolates:多线程编程的艺术
  • PyTorch 3.0静训架构深度拆解(企业级容错+混合精度+梯度压缩三重加固)
  • 为什么APKMirror是安卓用户最安全的应用下载工具?完整指南解析
  • ROS2数据录制实战:用ros2 bag记录小海龟运动轨迹(附常见问题排查)
  • 嵌入式系统内存碎片优化方案与实践
  • crypto-js 测试验证全攻略:从浏览器到自动化的加密功能验证实践
  • Umi-OCR服务化集成方案:构建企业级OCR自动化工作流的技术实现
  • 终极指南:3个维度解锁Cyber Engine Tweaks,重塑赛博朋克2077游戏体验
  • 告别Matrikon模拟器:用C#和Workstation.UaClient从零搭建一个真正的OPC UA客户端
  • PCB邮票孔设计与应用全解析
  • 高效全功能开源PPT制作工具:浏览器PPT编辑器的创新实践
  • 微信公众号自动化广告升级全解读:AI 时代的流量变现新机遇
  • Blender3mfFormat插件:3MF文件处理全攻略
  • xshell连接VMware虚拟机
  • 【AI】字节开源智能体DeerFlow
  • 从SGD到AdamW:我的模型训练优化器选择心路历程(附调参经验)
  • SMT贴片价格构成与成本优化实战解析
  • Harbor+Trivy镜像漏洞扫描实战:从零配置到离线环境避坑指南
  • LVGL实战:用lv_switch打造一个智能家居控制面板(ESP32+Arduino)
  • java中的异常分为哪几类 异常分类及处理原则说明
  • K型热电偶高温传感器原理与嵌入式驱动开发
  • Vita3K终极指南:在PC上完美运行PSVita游戏的完整教程