Redis 在真实项目中的 10 个经典应用场景(Java 后端必会)

很多人学习 Redis 时,会去背一堆命令:

arduino 复制代码
set
get
zadd
hset
lpush

但真正到项目中,往往不知道 Redis 能解决什么业务问题

其实 Redis 在企业项目中的核心价值只有一句话:

用内存解决高并发问题

本文整理 10 个 Java 后端开发最常见的 Redis 场景 ,基本覆盖 90% 企业项目使用 Redis 的方式


一、缓存热点数据(最常见)

场景

比如:

  • 用户信息
  • 商品详情
  • 首页数据
  • 系统配置
  • 权限菜单

这些数据:

  • 查询频繁
  • 更新较少

非常适合放 Redis。


使用结构

arduino 复制代码
String

示例

查询用户信息:

ini 复制代码
String key = "user:info:" + userId;

Object cache = redisTemplate.opsForValue().get(key);
if(cache != null){
    return cache;
}

User user = userMapper.selectById(userId);

redisTemplate.opsForValue().set(key,user,30,TimeUnit.MINUTES);

return user;

Key 设计建议

推荐格式:

makefile 复制代码
业务:模块:标识

例如:

makefile 复制代码
user:info:1001
product:detail:888
config:system

二、登录态 / Token 存储

场景

用户登录后,需要保存登录信息:

例如:

rust 复制代码
token -> 用户信息

Redis 非常适合做 登录态存储


使用结构

复制代码
Hash

示例

vbnet 复制代码
String key = "login:token:" + token;

redisTemplate.opsForHash().put(key,"userId",user.getId());
redisTemplate.opsForHash().put(key,"username",user.getUsername());

redisTemplate.expire(key,7,TimeUnit.DAYS);

好处

相比 Session:

  • 支持分布式
  • 支持多服务
  • 读取速度快

三、短信验证码 / 邮箱验证码

场景

例如:

  • 登录验证码
  • 注册验证码
  • 修改手机号验证码

使用结构

arduino 复制代码
String

示例

ini 复制代码
String code = "123456";

redisTemplate.opsForValue().set(
        "sms:code:13800000000",
        code,
        5,
        TimeUnit.MINUTES
);

注意

需要同时做 发送频率限制

makefile 复制代码
sms:send:phone

避免恶意刷验证码。


四、分布式锁

场景

防止多服务器同时执行同一任务,例如:

  • 防止重复下单
  • 防止重复生成账单
  • 防止重复退款
  • 防止定时任务重复执行

Redis实现

csharp 复制代码
Boolean lock = redisTemplate.opsForValue()
        .setIfAbsent("lock:order:123","1",30,TimeUnit.SECONDS);

if(lock){
    try{
        //业务逻辑
    }finally{
        redisTemplate.delete("lock:order:123");
    }
}

推荐方案

生产环境更推荐:

复制代码
Redisson

因为:

  • 自动续期
  • 防死锁
  • 可重入锁

五、排行榜(ZSet)

场景

例如:

  • 用户积分排行榜
  • 销售排行榜
  • 热门文章
  • 职位热度榜

使用结构

复制代码
ZSet

示例

sql 复制代码
ZADD rank:user 100 user1
ZADD rank:user 90 user2
ZADD rank:user 120 user3

获取前10名:

sql 复制代码
ZREVRANGE rank:user 0 9 WITHSCORES

六、延迟任务 / 超时关闭订单

场景

例如:

  • 30分钟未支付关闭订单
  • 面试预约超时
  • 电子签约超时

实现方式

score 存时间戳:

arduino 复制代码
ZADD order:delay 1710000000 order123

扫描到期任务:

arduino 复制代码
ZRANGEBYSCORE order:delay -inf 当前时间

执行后删除:

arduino 复制代码
ZREM order:delay order123

七、接口限流 / 防刷

场景

例如:

  • 登录接口限制
  • API访问限制
  • 短信接口防刷

实现

ini 复制代码
String key = "limit:login:"+ip;

Long count = redisTemplate.opsForValue().increment(key);

if(count == 1){
    redisTemplate.expire(key,1,TimeUnit.MINUTES);
}

if(count > 5){
    throw new RuntimeException("请求过于频繁");
}

八、消息队列 / 异步任务

场景

例如:

  • 发送短信
  • 发送邮件
  • 生成通知

使用结构

复制代码
List

生产者:

arduino 复制代码
LPUSH msg:queue task1

消费者:

arduino 复制代码
BRPOP msg:queue 0

九、购物车 / 临时数据

场景

例如:

  • 电商购物车
  • 临时表单
  • 草稿数据

使用结构

复制代码
Hash

示例:

sql 复制代码
HSET cart:user:1001 sku100 2
HSET cart:user:1001 sku101 1

十、签到 / 去重 / 标签系统

场景

例如:

  • 今日签到用户
  • 文章点赞用户
  • 活动参与用户

使用结构

javascript 复制代码
Set

示例:

r 复制代码
SADD sign:20260318 user1
SADD sign:20260318 user2

判断是否签到:

r 复制代码
SISMEMBER sign:20260318 user1

总结

Redis 常见结构与场景:

数据结构 使用场景
String 缓存、验证码、锁
Hash 用户会话、购物车
Set 去重、标签
ZSet 排行榜、延迟任务
List 消息队列

掌握这些场景,Redis 在项目中基本就 够用了

相关推荐
Xidaoapi2 分钟前
Python FastAPI性能优化实战:8个让你的API快3倍的技巧
后端·程序员
William Dawson4 分钟前
【通俗易懂!Spring四大核心注解源码解读:@Configuration、@ComponentScan、@Import、@EnableXXX实战】
java·后端·spring
倚栏听风雨7 分钟前
Mac 本地开发:用 Nginx 配置自定义域名代理到本地服务
后端
fliter7 分钟前
在 Rust 异步接口的丛林中生存:从同步 I/O 到手写异步状态机
后端
菜菜小狗的学习笔记1 小时前
八股(九)杂七杂八
java·后端·spring
逍遥德1 小时前
Java编程高频的“技术点”-01:自定义全局异常处理器
java·开发语言·spring boot·后端
小旭95271 小时前
商品详情实现与缓存问题(穿透、击穿、雪崩)解决方案
java·数据库·spring boot·后端·缓存
迷渡2 小时前
用 Rust 重写的 Bun 有 13365 个 unsafe!
开发语言·后端·rust
AI_大白2 小时前
DeepSeek Function Calling 接入实时行情:从工具定义到多轮查询的完整示例
后端·架构
Cosolar3 小时前
从零搭建本地 RAG 系统:LangChain + LM Studio 完整实战指南
人工智能·后端·面试