明白了,你说的 redistemplate 实际上是 Spring 的 RedisTemplate
这是Java 后端 / Spring / 微服务面试的必考点之一。
我给你一份 👉 【RedisTemplate 常用方法大全(面试必备版)】,按数据结构分类,背这份基本不翻车


一、RedisTemplate 是什么?(面试第一问)

RedisTemplate 是 Spring Data Redis 提供的操作 Redis 的核心模板类

特点:

  • 封装 Redis 命令
  • 支持事务、管道
  • 支持多种数据结构
  • 自动序列化 / 反序列化

常见注入:

@Autowired
private RedisTemplate<String, Object> redisTemplate;


二、5 大核心操作对象(必须会背)

Redis 数据结构对应方法
StringopsForValue()
HashopsForHash()
ListopsForList()
SetopsForSet()
ZSetopsForZSet()

三、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(必考)

对比RedisTemplateStringRedisTemplate
value 类型ObjectString
序列化JDKString
使用难度简单
推荐场景复杂对象简单缓存

十二、面试速记口诀(送你)

String 缓存
Hash 对象
List 队列
Set 去重
ZSet 排行榜


如果你愿意,我还能帮你:

  • RedisTemplate 面试题 + 标准答案
  • 缓存穿透 / 击穿 / 雪崩怎么答
  • RedisTemplate 实战代码
  • 高频面试“反杀追问”