前言
大家好,我是程序员只因。最近跟着黑马学习了Redis,作为后端开发必备的中间件,Redis 是面试高频考点,也是项目开发中缓存、限流、分布式锁的核心工具。
这篇文章是我从零学习 Redis 的实战总结,没有晦涩的底层源码,只讲新手必掌握、求职必问的核心知识点 + Java 实操代码,适合所有后端入门同学参考。
一、Redis 是什么?为什么后端必须学?
1. 核心定义
Redis(Remote Dictionary Server)是一款开源、高性能、基于内存的键值(Key-Value)数据库,常被用作缓存中间件。
2. 为什么 Java 后端离不开 Redis?
- 性能极高:纯内存操作,QPS 可达十万级,远超 MySQL 磁盘数据库
- 缓解数据库压力:热点数据缓存,避免频繁查询 MySQL
- 功能丰富:支持缓存、分布式锁、限流、计数器、消息队列、会话存储
- 面试必考:校招后端面试,Redis 基础、缓存问题、持久化、过期策略是高频题
二、Redis 核心特性(新手必记)
1. 内存存储 + 持久化
Redis 数据默认存在内存中,速度极快;同时支持 RDB、AOF 持久化机制,重启后数据不丢失,解决了纯内存数据易丢失的问题。
2. 单线程模型
Redis 核心读写采用单线程模型,避免了多线程竞争锁的开销,这也是它高性能的核心原因之一。注意:Redis 6.0 后多线程只处理网络 IO,核心命令执行依旧单线程。
3. 支持多种数据结构
不同于普通 KV 缓存,Redis 不仅仅存字符串,新手必须掌握 5 大基础数据结构:
- String(字符串):最常用,缓存用户信息、配置、计数器
- List(列表):有序可重复,实现消息队列、排行榜
- Set(集合):无序不可重复,实现去重、共同好友
- Hash(哈希):适合存储对象,如用户信息、商品详情
- ZSet(有序集合):带权重排序,实现热搜、积分排行榜
三、环境搭建(Windows 通用教程)
新手推荐使用绿色版 Redis,无需复杂配置:
- 下载 Redis 绿色版,解压即可使用
- 打开
redis-server.exe启动服务端(默认端口 6379) - 打开
redis-cli.exe启动客户端,默认本地连接
启动成功后,输入 ping,返回PONG 即环境搭建完成。
四、Java 整合 Redis 实战(SpringBoot)
后端开发核心:会用代码操作 Redis,下面是可直接运行的 SpringBoot 整合案例。
1. 引入 Maven 依赖
<!-- SpringBoot Redis 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置 application.yml
spring:
redis:
# 本地地址
host: localhost
# 默认端口
port: 6379
# 默认无密码
password:
# 选择数据库,默认 0 库
database: 0
3. 基础 CRUD 代码演示
使用 Spring 封装的 RedisTemplate 实现最常用的 String 读写操作:
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
@Component
public class RedisUtil {
@Resource
private RedisTemplate<String, Object> redisTemplate;
/**
* 设置缓存(带过期时间)
*/
public void set(String key, Object value, long time) {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
} else {
redisTemplate.opsForValue().set(key, value);
}
}
/**
* 获取缓存
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
/**
* 删除缓存
*/
public Boolean del(String key) {
return redisTemplate.delete(key);
}
}
4. 测试接口
@RestController
@RequestMapping("/redis")
public class RedisController {
@Resource
private RedisUtil redisUtil;
@GetMapping("/set")
public String setRedis() {
// 设置 key:username,value:zhangsan,过期时间 60 秒
redisUtil.set("username","zhangsan",60);
return "缓存设置成功";
}
@GetMapping("/get")
public String getRedis() {
return (String) redisUtil.get("username");
}
}
五、新手学习踩坑记录(真实问题)
学习过程中遇到 2 个高频问题,帮大家避坑:
1. 启动连接失败
原因:Redis 服务未启动 / 端口被占用 解决:先启动 redis-server,确认 6379 端口正常占用
2. 存储中文乱码
原因:RedisTemplate 默认序列化规则问题 解决:后续可以自定义 Jackson2JsonRedisSerializer 序列化规则,统一编码格式
六、学习总结 & 后续规划
通过本次学习,我掌握了:
- Redis 的定位、核心优势、适用场景
- 5 大基础数据结构的业务用途
- SpringBoot 整合 Redis 实现基础缓存读写
后续学习计划 :
接下来会继续深耕 Redis,依次学习:缓存过期策略、缓存穿透/击穿/雪崩解决方案、持久化机制、分布式锁实战,持续输出系列博客,搭建自己的后端技术知识库。
写在最后
作为在校生,持续输出技术博客是拉开求职差距的核心方式。拒绝只会抄课、只会听课,把每一个知识点落地成文章、代码、实战项目,日积月累就是校招最强作品集。
后续会持续更新 Java 后端、Redis、SpringBoot、MySQL 系列干货,欢迎一起交流学习~