Redis 都有哪些用处?都会用在什么地方?

一句话总括:

Redis 不仅是缓存,更是高性能的内存数据结构服务,常用于缓存、计数、锁、排行榜、限流、消息队列、Session 管理等场景。


一、最常用:缓存(Cache)✅

典型用法

  • 热点数据缓存(商品详情、用户信息、配置)

  • 减轻 MySQL 压力

  • 提升接口响应速度

    请求 → Redis(命中)→ 返回
    请求 → Redis(未命中)→ MySQL → 写回 Redis → 返回

常配策略

  • 过期时间(TTL)
  • 淘汰策略(LRU / LFU)
  • 缓存预热 / 缓存更新(旁路缓存)

面试说

我们用 Redis 做业务热点数据的缓存,把 MySQL 中频繁读取但很少变更的数据放到 Redis,设置合理 TTL,显著降低数据库压力。


二、计数器 / 自增 ID(String / INCR)✅

典型场景

  • 文章阅读量
  • 点赞数
  • 接口调用次数
  • 每日 UV 粗略统计
css 复制代码
INCR article:view:1001

✅ 原子操作,高并发安全,不需要加锁


三、分布式锁(你刚学过的)✅

典型场景

  • 秒杀扣库存
  • 定时任务只跑一次(多实例)
  • 防止重复提交
sql 复制代码
SET lock:order:123 uuid NX PX 30000

✅ 配合 Lua 脚本解锁 + 锁续期


四、排行榜 / 排行榜 TopN(ZSet)✅

典型场景

  • 积分排行榜

  • 销量排名

  • 最近活跃度

    ZADD rank 95 user_1
    ZREVRANGE rank 0 9 WITHSCORES

✅ 自动按 score 排序,O(log N)


五、集合类(Set / Hash)✅

Set 场景

  • 共同好友
  • 标签
  • 已读 / 点赞去重
  • 抽奖(SRANDMEMBER)

Hash 场景

  • 用户信息对象

  • 购物车(Hash 比 String 更语义化)

    HSET cart:uid1 sku_1 2
    HINCRBY cart:uid1 sku_1 1


六、限流(Rate Limit)✅ 加分点

固定窗口(简单)

bash 复制代码
INCR limit:ip:127.0.0.1
EXPIRE limit:ip:127.0.0.1 60

滑动窗口(高级)

  • 用 ZSet 记录时间戳
  • 或 Redis-Cell(令牌桶)

面试加分说

我们在网关层用 Redis 做接口限流,防止恶意刷接口,比如每 IP 每分钟最多 100 次。


七、Session / Token 存储 ✅

典型场景

  • 登录 Session(Spring Session Redis)
  • JWT / OAuth 的黑名单/白名单
  • 验证码(手机验证码 + TTL)
markdown 复制代码
SETEX sms:138****0000 300 123456

八、消息队列 / 发布订阅(了解即可)✅

List(简单队列)

arduino 复制代码
LPUSH queue task1
RPOP queue

BRPOP(阻塞)

Pub/Sub(通知 / 广播)

  • 订单创建通知
  • 实时提醒

⚠️ 说明:

  • Redis Stream 更接近真正 MQ
  • 关键业务建议用 Kafka / RabbitMQ
  • Redis MQ 适合轻量、可丢消息场景

九、Bitmap / HyperLogLog(数据分析类)✅ 加分

  • Bitmap:签到、日活统计
r 复制代码
SETBIT sign:20240101 uid 1
BITCOUNT sign:20240101
  • HyperLogLog:UV 去重估算

    PFADD uv:20240101 user_1
    PFCOUNT uv:20240101


🎙️ 面试标准口述版(推荐背这个)

Redis 在我们项目里用途比较多,不止是缓存。

最常见是做热点数据缓存,减轻 MySQL 压力;

其次用 INCR 做计数器,比如阅读量、点赞数;

用 SET NX 实现分布式锁,防止多实例并发问题;

ZSet 做排行榜,Set 做去重和标签,Hash 存对象或购物车;

也用 Redis 做接口限流、存储登录验证码和 Session;

在轻量场景会用 List / Stream 做简单消息队列,Bitmap 做签到统计。

不同场景会选不同的数据结构,而不只是当 KV 缓存用。


✅ 面试官想听的重点(打分点)

他希望你说到 你有没有
不只会说缓存
能对应数据结构
有真实业务场景
知道 Redis 不是万能 MQ
能顺带提缓存问题(穿透/锁) ✅(你已有)
相关推荐
再吃一根胡萝卜1 小时前
分布式与分布式锁:从访问量到数据一致性
后端
再吃一根胡萝卜1 小时前
分库分表:为什么我不建议一上来就分表
后端
再吃一根胡萝卜1 小时前
MySQL 慢查询优化:从定位到根治的完整思路
后端
Nturmoils2 小时前
订单查询丢数据,查了半天原来是 WHERE 惹的祸
数据库·后端
叫我Paul就好2 小时前
自从用上 Agents View 之后, 我的心力交瘁感消失了
后端
SamDeepThinking2 小时前
组合还是继承?我在项目里主要看这两个判断
java·后端·面试
niuju2 小时前
一种基于 Agent 的需求规范化闭环实践:让合规与规范内建于流程
后端
团团崽_七分甜2 小时前
四大数据库底层原理详解
后端
glartchen2 小时前
使用 Pixi 配置 Whisper 环境,实现采用本地大模型读取视频字幕
后端