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 在项目中基本就 够用了

相关推荐
努力的小雨几秒前
10 个任务拆成 22 项能力,Seed 2.1 Pro 哪些方向值得用?
后端
步行cgn20 分钟前
Spring 基于 XML 的自动装配:byType 详解
java·后端·spring
步行cgn9 小时前
Spring c 命名空间注入详解
java·后端·spring
明月_清风9 小时前
Maven 到底是什么?一篇文章搞懂 Java 项目构建与依赖管理
java·后端·maven
明月_清风10 小时前
AI 越来越强,程序员真正的价值到底是什么?
人工智能·后端
aramae10 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路10 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
码事漫谈11 小时前
别再跟AI说“请”了,它根本不 care——但有个东西它超在意
后端
郑州光合科技余经理13 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
IT_陈寒14 小时前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端