明白了,你说的 redistemplate 实际上是 Spring 的 RedisTemplate。
这是Java 后端 / Spring / 微服务面试的必考点之一。
我给你一份 👉 【RedisTemplate 常用方法大全(面试必备版)】,按数据结构分类,背这份基本不翻车。
一、RedisTemplate 是什么?(面试第一问)
RedisTemplate 是 Spring Data Redis 提供的操作 Redis 的核心模板类
特点:
- 封装 Redis 命令
- 支持事务、管道
- 支持多种数据结构
- 自动序列化 / 反序列化
常见注入:
@Autowired
private RedisTemplate<String, Object> redisTemplate;
二、5 大核心操作对象(必须会背)
| Redis 数据结构 | 对应方法 |
|---|---|
| String | opsForValue() |
| Hash | opsForHash() |
| List | opsForList() |
| Set | opsForSet() |
| ZSet | opsForZSet() |
三、String(最常用,缓存必考)
ValueOperations<String, Object> ops = redisTemplate.opsForValue();
常用方法
| 方法 | 作用 |
|---|---|
set(key, value) | 存值 |
get(key) | 取值 |
set(key, value, timeout, unit) | 存值 + 过期 |
increment(key) | 自增 |
increment(key, delta) | 指定增量 |
decrement(key) | 自减 |
append(key, value) | 追加 |
📌 面试高频
如何设置缓存过期?
ops.set("k", "v", 10, TimeUnit.MINUTES);
四、Hash(对象缓存必考)
HashOperations<String, String, Object> ops = redisTemplate.opsForHash();
常用方法
| 方法 | 作用 |
|---|---|
put(key, hashKey, value) | 存字段 |
get(key, hashKey) | 取字段 |
putAll(key, map) | 批量 |
entries(key) | 全部 |
keys(key) | 所有字段 |
values(key) | 所有值 |
delete(key, hashKey) | 删除字段 |
hasKey(key, hashKey) | 是否存在 |
📌 面试点
为什么用 Hash 存对象?
✔ 节省空间
✔ 支持字段级更新
五、List(队列 / 消息)
ListOperations<String, Object> ops = redisTemplate.opsForList();
常用方法
| 方法 | 作用 |
|---|---|
leftPush(key, value) | 左入 |
rightPush(key, value) | 右入 |
leftPop(key) | 左出 |
rightPop(key) | 右出 |
range(key, start, end) | 查询 |
size(key) | 长度 |
remove(key, count, value) | 删除 |
📌 面试点
Redis List 能不能当队列?
✔ 可以
❌ 不适合高可靠消息(对比 MQ)
六、Set(去重 / 关系)
SetOperations<String, Object> ops = redisTemplate.opsForSet();
常用方法
| 方法 | 作用 |
|---|---|
add(key, values...) | 添加 |
members(key) | 所有元素 |
isMember(key, value) | 是否存在 |
remove(key, value) | 删除 |
size(key) | 数量 |
intersect(k1, k2) | 交集 |
union(k1, k2) | 并集 |
difference(k1, k2) | 差集 |
📌 使用场景
- 点赞
- 标签
- 黑名单
七、ZSet(排行榜必考)
ZSetOperations<String, Object> ops = redisTemplate.opsForZSet();
常用方法
| 方法 | 作用 |
|---|---|
add(key, value, score) | 添加 |
incrementScore(key, value, delta) | 加分 |
score(key, value) | 查分 |
rank(key, value) | 升序排名 |
reverseRank(key, value) | 降序排名 |
range(key, start, end) | 升序 |
reverseRange(key, start, end) | 降序 |
📌 面试高频
排行榜怎么做?
✔ Redis ZSet + score
八、Key 通用操作(必背)
redisTemplate.delete(key);
| 方法 | 作用 |
|---|---|
hasKey(key) | 是否存在 |
delete(key) | 删除 |
expire(key, time, unit) | 设置过期 |
getExpire(key) | 剩余时间 |
keys(pattern) | 模糊查询(慎用) |
rename(old, new) | 重命名 |
⚠️ 面试加分点:keys("*") 线上慎用,会阻塞 Redis
九、事务 & 管道(进阶)
事务
redisTemplate.multi();
redisTemplate.exec();
管道
redisTemplate.executePipelined(...)
📌 面试点:
- Redis 事务不保证回滚
- 管道用于 批量提升性能
十、序列化(面试必问)
常见问题
为什么 Redis 里是乱码?
原因:
- 默认使用 JDK 序列化
解决方案(面试加分)
- 使用 StringRedisTemplate
- 或配置 Jackson2JsonRedisSerializer
十一、RedisTemplate vs StringRedisTemplate(必考)
| 对比 | RedisTemplate | StringRedisTemplate |
|---|---|---|
| value 类型 | Object | String |
| 序列化 | JDK | String |
| 使用难度 | 高 | 简单 |
| 推荐场景 | 复杂对象 | 简单缓存 |
十二、面试速记口诀(送你)
String 缓存
Hash 对象
List 队列
Set 去重
ZSet 排行榜
如果你愿意,我还能帮你:
- ✅ RedisTemplate 面试题 + 标准答案
- ✅ 缓存穿透 / 击穿 / 雪崩怎么答
- ✅ RedisTemplate 实战代码
- ✅ 高频面试“反杀追问”
发表回复