news 2026/2/3 3:32:53

redis入门全网最详细:Spring Data Redis 常用 API

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
redis入门全网最详细:Spring Data Redis 常用 API

Spring Data Redis 常用 API 整理

本文整理 Spring Data Redis 核心操作 API,基于 Spring Boot 环境,代码可直接复制使用,涵盖字符串、哈希、列表、集合、有序集合及通用操作等核心场景。

一、基础准备

1.1 依赖引入(Maven)

<!-- Spring Data Redis 核心依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- 可选:Lettuce 连接池(默认内置,需配置连接池依赖) --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>

1.2 核心配置(RedisTemplate 序列化配置)

默认RedisTemplate序列化会导致 key/value 乱码,建议自定义配置:

importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;importorg.springframework.data.redis.serializer.StringRedisSerializer;@ConfigurationpublicclassRedisConfig{@BeanpublicRedisTemplate<String,Object>redisTemplate(RedisConnectionFactoryconnectionFactory){RedisTemplate<String,Object>redisTemplate=newRedisTemplate<>();redisTemplate.setConnectionFactory(connectionFactory);// Key 序列化:String 序列化StringRedisSerializerstringRedisSerializer=newStringRedisSerializer();redisTemplate.setKeySerializer(stringRedisSerializer);redisTemplate.setHashKeySerializer(stringRedisSerializer);// Value 序列化:JSON 序列化(支持对象)GenericJackson2JsonRedisSerializerjsonRedisSerializer=newGenericJackson2JsonRedisSerializer();redisTemplate.setValueSerializer(jsonRedisSerializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);redisTemplate.afterPropertiesSet();returnredisTemplate;}

1.3 核心组件说明

组件用途
RedisTemplate通用 Redis 操作模板,支持任意类型 Key/Value(需配置序列化)
StringRedisTemplate专用字符串操作模板,默认 String 序列化,无需额外配置,适合纯字符串场景

二、核心 API 示例

2.1 字符串(String)- 最常用

适用于:缓存单个值、计数器、分布式锁等场景。

importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.stereotype.Component;importjavax.annotation.Resource;importjava.util.concurrent.TimeUnit;@ComponentpublicclassRedisStringDemo{@ResourceprivateRedisTemplate<String,Object>redisTemplate;// ========== 基础操作 ==========// 1. 设置值(无过期时间)publicvoidset(Stringkey,Objectvalue){redisTemplate.opsForValue().set(key,value);}// 2. 设置值 + 过期时间publicvoidsetWithExpire(Stringkey,Objectvalue,longtimeout,TimeUnitunit){redisTemplate.opsForValue().set(key,value,timeout,unit);}// 3. 获取值publicObjectget(Stringkey){returnredisTemplate.opsForValue().get(key);}// 4. 删除值publicBooleandelete(Stringkey){returnredisTemplate.delete(key);}// ========== 进阶操作 ==========// 5. 仅当 key 不存在时设置(分布式锁核心)publicBooleansetIfAbsent(Stringkey,Objectvalue,longtimeout,TimeUnitunit){returnredisTemplate.opsForValue().setIfAbsent(key,value,timeout,unit);}// 6. 数值递增(计数器)publicLongincrement(Stringkey,longdelta){returnredisTemplate.opsForValue().increment(key,delta);}// 7. 数值递减publicLongdecrement(Stringkey,longdelta){returnredisTemplate.opsForValue().decrement(key,delta);}// 8. 获取字符串长度publicLongsize(Stringkey){returnredisTemplate.opsForValue().size(key);}}

2.2 哈希(Hash)

适用于:缓存对象(如用户信息)、结构化数据,无需序列化整个对象,可单独操作字段。

@ComponentpublicclassRedisHashDemo{@ResourceprivateRedisTemplate<String,Object>redisTemplate;// ========== 基础操作 ==========// 1. 设置哈希字段值publicvoidhSet(Stringkey,StringhashKey,Objectvalue){redisTemplate.opsForHash().put(key,hashKey,value);}// 2. 获取哈希字段值publicObjecthGet(Stringkey,StringhashKey){returnredisTemplate.opsForHash().get(key,hashKey);}// 3. 获取哈希所有字段和值publicObjecthGetAll(Stringkey){returnredisTemplate.opsForHash().entries(key);}// 4. 获取哈希所有字段名publicSet<Object>hKeys(Stringkey){returnredisTemplate.opsForHash().keys(key);}// 5. 获取哈希所有值publicList<Object>hVals(Stringkey){returnredisTemplate.opsForHash().values(key);}// ========== 进阶操作 ==========// 6. 删除哈希指定字段publicLonghDelete(Stringkey,Object...hashKeys){returnredisTemplate.opsForHash().delete(key,hashKeys);}// 7. 判断哈希字段是否存在publicBooleanhExists(Stringkey,StringhashKey){returnredisTemplate.opsForHash().hasKey(key,hashKey);}// 8. 哈希字段数值递增publicLonghIncrement(Stringkey,StringhashKey,longdelta){returnredisTemplate.opsForHash().increment(key,hashKey,delta);}}

2.3 列表(List)

适用于:队列、栈、消息列表等场景(有序、可重复)。

@ComponentpublicclassRedisListDemo{@ResourceprivateRedisTemplate<String,Object>redisTemplate;// ========== 基础操作 ==========// 1. 左压入(队列头部)publicLonglPush(Stringkey,Object...values){returnredisTemplate.opsForList().leftPushAll(key,values);}// 2. 右压入(队列尾部)publicLongrPush(Stringkey,Object...values){returnredisTemplate.opsForList().rightPushAll(key,values);}// 3. 左弹出(队列头部)publicObjectlPop(Stringkey){returnredisTemplate.opsForList().leftPop(key);}// 4. 右弹出(队列尾部)publicObjectrPop(Stringkey){returnredisTemplate.opsForList().rightPop(key);}// 5. 获取列表指定范围元素(start=0, end=-1 表示所有)publicList<Object>lRange(Stringkey,longstart,longend){returnredisTemplate.opsForList().range(key,start,end);}// ========== 进阶操作 ==========// 6. 获取列表长度publicLonglSize(Stringkey){returnredisTemplate.opsForList().size(key);}// 7. 根据索引获取元素publicObjectlIndex(Stringkey,longindex){returnredisTemplate.opsForList().index(key,index);}// 8. 删除列表中指定值(count=0 删除所有,count>0 删前N个,count<0 删后N个)publicLonglRemove(Stringkey,longcount,Objectvalue){returnredisTemplate.opsForList().remove(key,count,value);}}

2.4 集合(Set)

适用于:去重、交集/并集/差集计算(如共同好友、标签)。

@ComponentpublicclassRedisSetDemo{@ResourceprivateRedisTemplate<String,Object>redisTemplate;// ========== 基础操作 ==========// 1. 添加元素publicLongsAdd(Stringkey,Object...values){returnredisTemplate.opsForSet().add(key,values);}// 2. 获取集合所有元素publicSet<Object>sMembers(Stringkey){returnredisTemplate.opsForSet().members(key);}// 3. 判断元素是否在集合中publicBooleansIsMember(Stringkey,Objectvalue){returnredisTemplate.opsForSet().isMember(key,value);}// 4. 删除元素publicLongsRemove(Stringkey,Object...values){returnredisTemplate.opsForSet().remove(key,values);}// ========== 进阶操作 ==========// 5. 获取集合大小publicLongsSize(Stringkey){returnredisTemplate.opsForSet().size(key);}// 6. 计算两个集合的交集publicSet<Object>sIntersect(Stringkey1,Stringkey2){returnredisTemplate.opsForSet().intersect(key1,key2);}// 7. 计算两个集合的并集publicSet<Object>sUnion(Stringkey1,Stringkey2){returnredisTemplate.opsForSet().union(key1,key2);}// 8. 计算两个集合的差集(key1 有,key2 无)publicSet<Object>sDifference(Stringkey1,Stringkey2){returnredisTemplate.opsForSet().difference(key1,key2);}}

2.5 有序集合(ZSet)

适用于:排行榜、带权重的排序场景(如积分排名、热度排序)。

@ComponentpublicclassRedisZSetDemo{@ResourceprivateRedisTemplate<String,Object>redisTemplate;// ========== 基础操作 ==========// 1. 添加元素(带分数)publicBooleanzAdd(Stringkey,Objectvalue,doublescore){returnredisTemplate.opsForZSet().add(key,value,score);}// 2. 按分数升序获取指定范围元素(start=0, end=-1 表示所有)publicSet<Object>zRange(Stringkey,longstart,longend){returnredisTemplate.opsForZSet().range(key,start,end);}// 3. 按分数降序获取指定范围元素publicSet<Object>zReverseRange(Stringkey,longstart,longend){returnredisTemplate.opsForZSet().reverseRange(key,start,end);}// 4. 获取元素的分数publicDoublezScore(Stringkey,Objectvalue){returnredisTemplate.opsForZSet().score(key,value);}// ========== 进阶操作 ==========// 5. 删除元素publicLongzRemove(Stringkey,Object...values){returnredisTemplate.opsForZSet().remove(key,values);}// 6. 获取集合大小publicLongzSize(Stringkey){returnredisTemplate.opsForZSet().size(key);}// 7. 元素分数递增publicDoublezIncrementScore(Stringkey,Objectvalue,doubledelta){returnredisTemplate.opsForZSet().incrementScore(key,value,delta);}// 8. 获取元素的排名(升序,从0开始)publicLongzRank(Stringkey,Objectvalue){returnredisTemplate.opsForZSet().rank(key,value);}}

2.6 通用操作

适用于:所有类型 Key 的通用管理(过期时间、存在性、删除等)。

@ComponentpublicclassRedisCommonDemo{@ResourceprivateRedisTemplate<String,Object>redisTemplate;// 1. 设置Key过期时间publicBooleanexpire(Stringkey,longtimeout,TimeUnitunit){returnredisTemplate.expire(key,timeout,unit);}// 2. 获取Key过期时间(返回秒数,-1=永不过期,-2=不存在)publicLonggetExpire(Stringkey){returnredisTemplate.getExpire(key);}// 3. 判断Key是否存在publicBooleanexists(Stringkey){returnredisTemplate.hasKey(key);}// 4. 删除多个KeypublicLongdeleteBatch(String...keys){returnredisTemplate.delete(keys);}// 5. 模糊查询Key(慎用!生产环境keys命令会阻塞Redis)publicSet<String>keys(Stringpattern){returnredisTemplate.keys(pattern);}// 6. 移除Key的过期时间(设为永不过期)publicBooleanpersist(Stringkey){returnredisTemplate.persist(key);}// 7. 获取Key的类型(string/hash/list/set/zset)publicStringtype(Stringkey){returnredisTemplate.type(key).name();}}

三、注意事项

  1. 序列化问题:务必配置RedisTemplate序列化规则,否则会出现 key 乱码(如\xAC\xED\x00\x05t\x00\x03key)。
  2. 过期时间setIfAbsent建议直接设置过期时间,避免死锁(Redis 2.6.12+ 支持)。
  3. 性能优化
    • 批量操作使用deleteBatchmGet等批量 API,减少网络往返;
    • 避免使用keys *等模糊查询,生产环境推荐scan命令;
  4. 数据类型匹配:操作 API 需与 Redis 实际数据类型匹配(如用opsForHash操作 String 类型 Key 会报错)。
  5. 连接池配置:生产环境务必配置 Lettuce 连接池,避免频繁创建/销毁连接:
    spring:redis:host:127.0.0.1port:6379password:123456lettuce:pool:max-active:8# 最大连接数max-idle:8# 最大空闲连接min-idle:0# 最小空闲连接max-wait:-1ms# 连接等待时间

四、StringRedisTemplate 简化示例

若仅操作字符串,可直接使用StringRedisTemplate,无需配置序列化:

@ComponentpublicclassStringRedisDemo{@ResourceprivateStringRedisTemplatestringRedisTemplate;publicvoidstringOps(){// 设置值stringRedisTemplate.opsForValue().set("name","张三");// 获取值Stringname=stringRedisTemplate.opsForValue().get("name");// 设置过期时间stringRedisTemplate.opsForValue().set("age","20",1,TimeUnit.HOURS);}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/29 13:42:12

LobeChat直播房间名称创意

LobeChat&#xff1a;打造智能直播房间命名助手的技术实践 在直播行业竞争日益激烈的今天&#xff0c;一个吸睛的直播间名称往往能决定一场直播的初始流量。然而&#xff0c;许多主播仍在为“今晚该起什么标题”而发愁——是走爆款路线博点击&#xff1f;还是保持调性吸引忠实粉…

作者头像 李华
网站建设 2026/1/29 12:44:17

Mermaid Live Editor 完整指南:从零开始制作专业流程图

Mermaid Live Editor 完整指南&#xff1a;从零开始制作专业流程图 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-edito…

作者头像 李华
网站建设 2026/1/29 11:38:49

22、培养高性能敏捷团队:策略与实践

培养高性能敏捷团队:策略与实践 1. 引言 在当今时代,应对市场波动、技术趋势和消费者习惯等变化至关重要。传统的层级管理系统和项目形式在快速变化的环境中往往难以适应,而敏捷团队的能力则成为了竞争的关键差异化因素。 敏捷方法起源于软件开发行业,因其灵活性、协作性…

作者头像 李华
网站建设 2026/1/29 14:20:39

OBS-VST插件终极指南:如何在直播中添加专业级音频效果

OBS-VST插件终极指南&#xff1a;如何在直播中添加专业级音频效果 【免费下载链接】obs-vst Use VST plugins in OBS 项目地址: https://gitcode.com/gh_mirrors/ob/obs-vst 在当今的直播和内容创作领域&#xff0c;优质的音频体验已经成为留住观众的关键因素。OBS-VST作…

作者头像 李华
网站建设 2026/1/29 14:21:22

20、量子算法中的相位反馈与经典应用

量子算法中的相位反馈与经典应用 1. 相位反馈(Phase Kickback) 相位反馈是指通过控制操作,将一个量子门赋予某个量子比特的特征值“反馈”到另一个量子比特上。要实现这一现象,量子比特必须处于叠加态。 在双量子比特状态下,当控制量子比特不处于叠加态 |0> 或 |1&g…

作者头像 李华
网站建设 2026/2/1 17:27:30

23、量子计算在化学与蛋白质折叠中的应用探索

量子计算在化学与蛋白质折叠中的应用探索 1. 海森堡自旋 1/2 哈密顿量 1.1 海森堡模型介绍 海森堡自旋 1/2 模型可用于研究磁系统的临界点和相变。其哈密顿量表达式如下: [H = J\sum_{i,j} (X_i X_j + Y_i Y_j + Z_i Z_j) + h\sum_{i} (X_i + Y_i + Z_i)] 其中,(X_i)、(…

作者头像 李华