很多人学习 Redis 时,会去背一堆命令:
set
get
zadd
hset
lpush
但真正到项目中,往往不知道 Redis 能解决什么业务问题。
其实 Redis 在企业项目中的核心价值只有一句话:
用内存解决高并发问题
本文整理 10 个 Java 后端开发最常见的 Redis 场景,基本覆盖 90% 企业项目使用 Redis 的方式。
一、缓存热点数据(最常见)
场景
比如:
- 用户信息
- 商品详情
- 首页数据
- 系统配置
- 权限菜单
这些数据:
- 查询频繁
- 更新较少
非常适合放 Redis。
使用结构
String
示例
查询用户信息:
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 设计建议
推荐格式:
业务:模块:标识
例如:
user:info:1001
product:detail:888
config:system
二、登录态 / Token 存储
场景
用户登录后,需要保存登录信息:
例如:
token -> 用户信息
Redis 非常适合做 登录态存储。
使用结构
Hash
示例
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:
- 支持分布式
- 支持多服务
- 读取速度快
三、短信验证码 / 邮箱验证码
场景
例如:
- 登录验证码
- 注册验证码
- 修改手机号验证码
使用结构
String
示例
String code = "123456";
redisTemplate.opsForValue().set(
"sms:code:13800000000",
code,
5,
TimeUnit.MINUTES
);
注意
需要同时做 发送频率限制:
sms:send:phone
避免恶意刷验证码。
四、分布式锁
场景
防止多服务器同时执行同一任务,例如:
- 防止重复下单
- 防止重复生成账单
- 防止重复退款
- 防止定时任务重复执行
Redis实现
Boolean lock = redisTemplate.opsForValue()
.setIfAbsent("lock:order:123","1",30,TimeUnit.SECONDS);
if(lock){
try{
//业务逻辑
}finally{
redisTemplate.delete("lock:order:123");
}
}
推荐方案
生产环境更推荐:
Redisson
因为:
- 自动续期
- 防死锁
- 可重入锁
五、排行榜(ZSet)
场景
例如:
- 用户积分排行榜
- 销售排行榜
- 热门文章
- 职位热度榜
使用结构
ZSet
示例
ZADD rank:user 100 user1
ZADD rank:user 90 user2
ZADD rank:user 120 user3
获取前10名:
ZREVRANGE rank:user 0 9 WITHSCORES
六、延迟任务 / 超时关闭订单
场景
例如:
- 30分钟未支付关闭订单
- 面试预约超时
- 电子签约超时
实现方式
score 存时间戳:
ZADD order:delay 1710000000 order123
扫描到期任务:
ZRANGEBYSCORE order:delay -inf 当前时间
执行后删除:
ZREM order:delay order123
七、接口限流 / 防刷
场景
例如:
- 登录接口限制
- API访问限制
- 短信接口防刷
实现
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
生产者:
LPUSH msg:queue task1
消费者:
BRPOP msg:queue 0
九、购物车 / 临时数据
场景
例如:
- 电商购物车
- 临时表单
- 草稿数据
使用结构
Hash
示例:
HSET cart:user:1001 sku100 2
HSET cart:user:1001 sku101 1
十、签到 / 去重 / 标签系统
场景
例如:
- 今日签到用户
- 文章点赞用户
- 活动参与用户
使用结构
Set
示例:
SADD sign:20260318 user1
SADD sign:20260318 user2
判断是否签到:
SISMEMBER sign:20260318 user1
总结
Redis 常见结构与场景:
| 数据结构 | 使用场景 |
|---|---|
| String | 缓存、验证码、锁 |
| Hash | 用户会话、购物车 |
| Set | 去重、标签 |
| ZSet | 排行榜、延迟任务 |
| List | 消息队列 |
掌握这些场景,Redis 在项目中基本就 够用了。