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

相关推荐
唐叔在学习2 小时前
Python桌面端应用消息提醒功能开发实践
后端·python·程序员
半夜里咳嗽的狼2 小时前
Java转Go的难点四:接口和适配器
后端
开到荼蘼2 小时前
Springboot 使用restTemplate发送https请求忽略ssl证书完整方案
后端
南方的耳朵2 小时前
vm跨节点通过geneve隧道收发包过程
后端
犯困的饭团2 小时前
2_【自动化引擎Ansible Runner】私有数据目录与命令行实战
后端
南方的耳朵2 小时前
kubevirt vm的流量包skb在不同net_device中流转全流程图
后端
砍材农夫2 小时前
spring ai 集成demo
后端
颜颜颜yan_2 小时前
让数据库学会说“不“——金仓 SQL 防火墙深度解析
数据库·后端
南方的耳朵2 小时前
linux上真实物理网卡和虚拟网络接口设备的区别
后端