引言
Spring Data Redis 提供的 RedisTemplate 是操作 Redis 的核心工具类,通过 opsForXxx() 系列方法,可直接适配 Redis 支持的 5 种核心数据类型(String、Hash、List、Set、SortedSet),同时提供通用命令处理所有 key 的生命周期操作。本文按标准格式汇总所有核心 API 及常用方法,便于快速查阅与开发使用。
1. 核心API总览
(一级标题采用小4号黑体加粗,表格字体为5号宋体,与示例格式一致)
| API | 返回值类型 | 说明 |
|---|---|---|
redisTemplate.opsForValue() |
ValueOperations |
操作String类型数据 |
redisTemplate.opsForHash() |
HashOperations |
操作Hash类型数据 |
redisTemplate.opsForList() |
ListOperations |
操作List类型数据 |
redisTemplate.opsForSet() |
SetOperations |
操作Set类型数据 |
redisTemplate.opsForZSet() |
ZSetOperations |
操作SortedSet(ZSet)类型数据 |
redisTemplate |
RedisTemplate |
调用所有数据类型通用的命令 |
2. 各数据类型详细操作API
2.1 String类型数据操作(redisTemplate.opsForValue())
| API | 返回值类型 | 说明 |
|---|---|---|
opsForValue().set(K key, V value) |
void |
设置String类型键值对,key存在则覆盖 |
opsForValue().set(K key, V value, long timeout, TimeUnit unit) |
void |
设置键值对并指定过期时间 |
opsForValue().setIfAbsent(K key, V value) |
Boolean |
仅当key不存在时设置值(等价于原生SETNX命令) |
opsForValue().setIfAbsent(K key, V value, long timeout, TimeUnit unit) |
Boolean |
不存在时设置值并同时指定过期时间 |
opsForValue().get(Object key) |
V |
获取指定key对应的String类型值 |
opsForValue().getAndSet(K key, V value) |
V |
获取key旧值并设置新值 |
opsForValue().increment(K key) |
Long |
数值类型key原子自增1 |
opsForValue().decrement(K key) |
Long |
数值类型key原子自减1 |
opsForValue().append(K key, String value) |
Integer |
向字符串末尾追加内容 |
opsForValue().size(K key) |
Long |
获取字符串长度 |
2.2 Hash类型数据操作(redisTemplate.opsForHash())
| API | 返回值类型 | 说明 |
|---|---|---|
opsForHash().put(H key, HK hashKey, HV value) |
void |
设置Hash中指定字段的值 |
opsForHash().putAll(H key, Map<? extends HK, ? extends HV> map) |
void |
批量设置Hash的多个字段值 |
opsForHash().putIfAbsent(H key, HK hashKey, HV value) |
Boolean |
仅当Hash字段不存在时设置值 |
opsForHash().get(H key, Object hashKey) |
HV |
获取Hash中指定字段的值 |
opsForHash().multiGet(H key, Collection<HK> hashKeys) |
List<HV> |
批量获取Hash中多个字段的值 |
opsForHash().entries(H key) |
Map<HK, HV> |
获取Hash中所有字段与对应值 |
opsForHash().keys(H key) |
Set<HK> |
获取Hash中所有字段名 |
opsForHash().values(H key) |
List<HV> |
获取Hash中所有字段值 |
opsForHash().hasKey(H key, Object hashKey) |
Boolean |
判断Hash中是否存在指定字段 |
opsForHash().delete(H key, Object... hashKeys) |
Long |
删除Hash中指定的字段 |
opsForHash().increment(H key, HK hashKey, long delta) |
Long |
Hash中指定字段数值原子增减(delta为负则自减) |
opsForHash().size(H key) |
Long |
获取Hash中字段的数量 |
2.3 List类型数据操作(redisTemplate.opsForList())
| API | 返回值类型 | 说明 |
|---|---|---|
opsForList().leftPush(K key, V value) |
Long |
从列表左侧(头部)插入元素 |
opsForList().leftPushAll(K key, V... values) |
Long |
从列表左侧批量插入多个元素 |
opsForList().rightPush(K key, V value) |
Long |
从列表右侧(尾部)插入元素 |
opsForList().rightPushAll(K key, V... values) |
Long |
从列表右侧批量插入多个元素 |
opsForList().leftPop(K key) |
V |
从列表左侧弹出并返回元素 |
opsForList().rightPop(K key) |
V |
从列表右侧弹出并返回元素 |
opsForList().range(K key, long start, long end) |
List<V> |
获取列表指定索引范围的元素(-1表示末尾) |
opsForList().size(K key) |
Long |
获取列表的长度 |
opsForList().remove(K key, long count, Object value) |
Long |
删除列表中指定数量的元素(count>0从左删,<0从右删) |
opsForList().set(K key, long index, V value) |
void |
设置列表指定索引位置的元素值 |
opsForList().index(K key, long index) |
V |
获取列表指定索引位置的元素 |
opsForList().trim(K key, long start, long end) |
void |
裁剪列表,仅保留指定索引范围的元素 |
2.4 Set类型数据操作(redisTemplate.opsForSet())
| API | 返回值类型 | 说明 |
|---|---|---|
opsForSet().add(K key, V... values) |
Long |
向集合添加一个或多个元素 |
opsForSet().members(K key) |
Set<V> |
获取集合中的所有元素 |
opsForSet().isMember(K key, Object value) |
Boolean |
判断元素是否存在于集合中 |
opsForSet().remove(K key, Object... values) |
Long |
删除集合中指定的元素 |
opsForSet().pop(K key) |
V |
随机弹出并返回集合中的一个元素 |
opsForSet().randomMember(K key) |
V |
随机获取集合中的一个元素(不删除) |
opsForSet().size(K key) |
Long |
获取集合中元素的数量 |
opsForSet().union(K key, Collection<K> otherKeys) |
Set<V> |
求多个集合的并集 |
opsForSet().intersect(K key, Collection<K> otherKeys) |
Set<V> |
求多个集合的交集 |
opsForSet().difference(K key, Collection<K> otherKeys) |
Set<V> |
求当前集合与其他集合的差集 |
2.5 SortedSet(ZSet)类型数据操作(redisTemplate.opsForZSet())
| API | 返回值类型 | 说明 |
|---|---|---|
opsForZSet().add(K key, V value, double score) |
Boolean |
向有序集合添加元素并指定分数 |
opsForZSet().range(K key, long start, long end) |
Set<V> |
按分数升序,获取指定索引范围的元素 |
opsForZSet().rangeWithScores(K key, long start, long end) |
Set<ZSetOperations.TypedTuple<V>> |
按分数升序,获取指定范围的元素及对应分数 |
opsForZSet().reverseRange(K key, long start, long end) |
Set<V> |
按分数降序,获取指定索引范围的元素 |
opsForZSet().score(K key, Object value) |
Double |
获取指定元素的分数 |
opsForZSet().incrementScore(K key, V value, double delta) |
Double |
原子增减指定元素的分数(delta为负则自减) |
opsForZSet().remove(K key, Object... values) |
Long |
删除有序集合中的指定元素 |
opsForZSet().removeRange(K key, long start, long end) |
Long |
按索引范围删除元素 |
opsForZSet().size(K key) |
Long |
获取有序集合中元素的数量 |
opsForZSet().rank(K key, Object value) |
Long |
获取元素的升序排名(从0开始) |
opsForZSet().reverseRank(K key, Object value) |
Long |
获取元素的降序排名(从0开始) |
2.6 通用命令操作API(redisTemplate)
| API | 返回值类型 | 说明 |
|---|---|---|
delete(Object key) |
Boolean |
删除指定key |
delete(Collection keys) |
Long |
批量删除多个key |
expire(K key, long timeout, TimeUnit unit) |
Boolean |
设置key的过期时间 |
expireAt(K key, Date date) |
Boolean |
设置key在指定时间戳过期 |
hasKey(K key) |
Boolean |
判断key是否存在 |
getExpire(K key) |
Long |
获取key的剩余过期时间(单位:秒) |
rename(K oldKey, K newKey) |
void |
重命名key |
type(K key) |
DataType |
获取key对应的数据类型 |
keys(K pattern) |
Set<K> |
获取匹配模式的所有key(生产环境慎用,避免阻塞) |
总结
(注:总结采用小3号黑体加粗,段前0.5行、段后0.5行,正文为5号宋体、1.5倍行距)
RedisTemplate 通过分层设计封装了 Redis 全类型操作,核心特点与使用建议如下:
- 按数据类型隔离 :
opsForXxx()系列方法将不同数据类型的操作解耦,API 语义清晰,便于维护; - 原子性保障:所有单命令操作均为 Redis 原生原子操作,天然支持并发场景(如分布式锁、计数器);
- 通用命令兜底 :
redisTemplate直接调用的通用命令,可统一处理 key 的生命周期管理; - 开发优化建议 :使用时需提前配置序列化器(如
Jackson2JsonRedisSerializer)避免乱码,高频操作优先使用带过期时间的方法,避免 key 堆积。