SpringDataRedis 操作 redis

发布时间:2026/11/4 18:32:12

SpringDataRedis 操作 redis Spring Data Redis 完全按照 Redis 的数据类型做了模块化封装和原生命令一一对应。下面我按「通用Key操作 5大核心数据类型」分类整理每个方法都标注等价的 Redis 原生命令和可直接运行的代码示例方便你对照记忆。一、通用 Key 操作所有数据类型通用这部分是所有数据类型共用的基础操作直接通过redisTemplate调用不需要先获取 ops 操作器。Java 方法功能说明等价 Redis 原生命令代码示例hasKey(key)判断 key 是否存在EXISTS keyredisTemplate.hasKey(demo:name)delete(key)删除指定 keyDEL keyredisTemplate.delete(demo:name)expire(key, 时间, 单位)给 key 设置过期时间EXPIRE key 秒数redisTemplate.expire(demo:name, 60, TimeUnit.SECONDS)getExpire(key)获取 key 剩余过期时间秒TTL keyredisTemplate.getExpire(demo:name)persist(key)移除 key 的过期时间永久保存PERSIST keyredisTemplate.persist(demo:name)rename(oldKey, newKey)修改 key 名称RENAME oldKey newKeyredisTemplate.rename(demo:name, demo:username)type(key)返回 key 存储的数据类型TYPE keyredisTemplate.type(demo:name)二、字符串类型 String →opsForValue()对应 Redis 最基础的 String 类型支持普通字符串、数字、序列化对象存储是开发中最常用的类型。操作入口redisTemplate.opsForValue()Java 方法功能说明等价 Redis 原生命令代码示例set(key, value)普通存入键值对SET key valueops.set(demo:name, 张三)set(key, value, 时间, 单位)存入并设置过期时间SET key value EX 秒数/SETEXops.set(demo:name, 张三, 60, TimeUnit.SECONDS)setIfAbsent(key, value)key 不存在时才存入分布式锁核心SETNX key valueops.setIfAbsent(lock:order, 1, 30, TimeUnit.SECONDS)setIfPresent(key, value)key 存在时才存入SET key value XXops.setIfPresent(demo:name, 李四)get(key)获取 key 对应的值【key 不存在 → 返回 null】GET keyops.get(demo:name)getAndSet(key, value)获取旧值并设置新值GETSET key valueops.getAndSet(demo:name, 王五)increment(key, 步长)数值原子递增用于计数INCRBY key 步长ops.increment(demo:viewCount, 1)decrement(key, 步长)数值原子递减DECRBY key 步长ops.decrement(demo:stock, 1)multiSet(Map)批量设置多个键值对MSETops.multiSet(Map.of(k1,v1,k2,v2))multiGet(Collection)批量获取多个 key 的值MGETops.multiGet(List.of(k1, k2))小提示increment是原子操作非常适合做点赞数、浏览量、库存扣减等计数场景。三、哈希类型 Hash →opsForHash()对应 Redis Hash 类型类似 Java 的 Map适合存储对象的字段属性不用序列化整个对象可单独修改单个字段。操作入口redisTemplate.opsForHash()Java 方法功能说明等价 Redis 原生命令代码示例put(key, field, value)存入单个字段HSET key field valueops.put(demo:user, name, 张三)putAll(key, Map)批量存入多个字段HMSET key field1 value1...ops.putAll(demo:user, Map.of(age,20,gender,男))get(key, field)获取单个字段的值HGET key fieldops.get(demo:user, name)entries(key)获取所有字段和值HGETALL keyops.entries(demo:user)keys(key)获取所有字段名HKEYS keyops.keys(demo:user)values(key)获取所有字段值HVALS keyops.values(demo:user)delete(key, fields...)删除指定字段HDEL key field1 field2ops.delete(demo:user, age, gender)hasKey(key, field)判断字段是否存在HEXISTS key fieldops.hasKey(demo:user, name)increment(key, field, 步长)指定字段数值递增HINCRBY key field 步长ops.increment(demo:user, score, 5)size(key)获取字段数量HLEN keyops.size(demo:user)四、列表类型 List →opsForList()对应 Redis List 类型有序、可重复支持两端插入弹出适合实现简单队列、栈、最新列表等场景。操作入口redisTemplate.opsForList()Java 方法功能说明等价 Redis 原生命令代码示例leftPush(key, value)从列表左侧头部插入元素LPUSH key valueops.leftPush(demo:msgList, 消息1)rightPush(key, value)从列表右侧尾部插入元素RPUSH key valueops.rightPush(demo:msgList, 消息2)leftPop(key)从左侧弹出一个元素LPOP keyops.leftPop(demo:msgList)rightPop(key)从右侧弹出一个元素RPOP keyops.rightPop(demo:msgList)range(key, start, end)按索引范围获取元素0到-1是全部LRANGE key start endops.range(demo:msgList, 0, -1)size(key)获取列表长度LLEN keyops.size(demo:msgList)index(key, index)获取指定索引位置的元素LINDEX key indexops.index(demo:msgList, 0)remove(key, count, value)删除指定个数的匹配元素LREM key count valueops.remove(demo:msgList, 1, 消息1)trim(key, start, end)截取列表保留指定范围LTRIM key start endops.trim(demo:msgList, 0, 9)常用场景左进右出 队列先进先出左进左出 栈先进后出trim常用来保留最新的N条记录。五、集合类型 Set →opsForSet()对应 Redis Set 类型无序、不可重复支持交集、并集、差集运算适合去重、标签、共同好友等场景。操作入口redisTemplate.opsForSet()Java 方法功能说明等价 Redis 原生命令代码示例add(key, values...)添加一个或多个元素SADD key v1 v2ops.add(demo:tags, Java, Spring, Redis)remove(key, values...)删除一个或多个元素SREM key v1 v2ops.remove(demo:tags, Redis)isMember(key, value)判断元素是否在集合中SISMEMBER key valueops.isMember(demo:tags, Java)members(key)获取集合中所有元素SMEMBERS keyops.members(demo:tags)size(key)获取集合元素个数SCARD keyops.size(demo:tags)intersect(key1, key2)两个集合的交集SINTER key1 key2ops.intersect(user1:tags, user2:tags)union(key1, key2)两个集合的并集SUNION key1 key2ops.union(user1:tags, user2:tags)difference(key1, key2)两个集合的差集SDIFF key1 key2ops.difference(user1:tags, user2:tags)randomMember(key)随机获取一个元素SRANDMEMBER keyops.randomMember(demo:tags)六、有序集合类型 ZSet →opsForZSet()对应 Redis ZSet 类型不可重复、每个元素带一个分数score按分数自动排序是实现排行榜、热度排名的首选。操作入口redisTemplate.opsForZSet()Java 方法功能说明等价 Redis 原生命令代码示例add(key, value, score)添加元素分数ZADD key score valueops.add(demo:rank, 张三, 95)remove(key, values...)删除元素ZREM key v1 v2ops.remove(demo:rank, 张三)range(key, start, end)按索引升序获取元素ZRANGE key start endops.range(demo:rank, 0, -1)reverseRange(key, start, end)按索引降序获取元素ZREVRANGE key start endops.reverseRange(demo:rank, 0, 9)rangeByScore(key, min, max)按分数范围升序获取ZRANGEBYSCORE key min maxops.rangeByScore(demo:rank, 60, 100)rank(key, value)获取元素升序排名从0开始ZRANK key valueops.rank(demo:rank, 张三)reverseRank(key, value)获取元素降序排名ZREVRANK key valueops.reverseRank(demo:rank, 张三)incrementScore(key, value, delta)增加元素的分数ZINCRBY key delta valueops.incrementScore(demo:rank, 张三, 5)size(key)获取集合元素个数ZCARD keyops.size(demo:rank)开发必知注意点序列化问题你代码中用的RedisTemplateString, Object默认是 JDK 序列化存入 Redis 后是二进制乱码可读性很差。实际开发中建议配置 Jackson JSON 序列化器把对象存成 JSON 格式兼顾可读性和自动转换。StringRedisTemplate如果只操作字符串优先用StringRedisTemplate它默认就是字符串序列化不需要额外配置是业务开发中更常用的版本。命名规范推荐用业务模块:功能:id的冒号分隔命名比如user:info:1001在 Redis 可视化工具中会自动分层显示结构更清晰。
延伸阅读

更多相关文章

2026/10/28 15:33:26

深耕数智基建 赋能 AI 落地|光环新网荣获 AI 数字基础设施最佳实践

2026 年 8 月 22 日,第五届中国数据 AI 价值峰会于北京成功举办。会议以“数据驱动AI”为主题,聚焦数据要素价值释放与 AI 工程化落地,并于同期举行了数据 AI创新标杆案例颁奖活动。光环新网凭借在数字基础设施领域的持续深耕建设与AI数智落地…

2026/10/28 18:28:11

计算机毕设选题:融合 AI 分析与文化图谱的非遗平台功能设计

一、AI 与非遗文化平台的结合 传统文化网站通常以文章和图片展示为主,内容之间缺少关联,用户也很难快速理解项目的历史演变与文化价值。“承遗”平台增加 AI 项目分析、个性化推荐、文化图谱和智能问答,让用户能够从时间、技艺、地域、人物及…

2026/11/3 0:52:32

机器人最难的一场比赛:从导航、运动学到具身智能的技术拆解

机器人行业正在经历一场明显的转折。几年前,大家讨论的是“机器人能做什么”,是机械臂的重复精度、AGV 的循迹能力、运动控制卡的插补效率。而现在的讨论重心已经变了,变成了“机器人怎么学会在陌生环境里干活”,变成了感知、决策…

2026/11/4 18:28:35

AgentScope 2.0:面向生产级多智能体协同的Java运行时基础设施

1. 这不是又一个“AI Agent框架”——AgentScope到底在解决什么真问题?最近在几个技术群和内部分享会上,总有人甩出一句:“推荐一个牛逼的AgentScope系统”,然后就没了下文。我一开始也以为是另一个披着Agent外衣、实则跑个LangCh…

2026/11/4 18:28:35

AutoCAD二次开发:ObjectARX与Visual Studio版本对应指南

1. ObjectARX与Visual Studio版本对应关系详解在AutoCAD二次开发领域,ObjectARX作为官方提供的开发框架,其版本与Visual Studio的兼容性一直是开发者必须面对的首要问题。作为一名从事AutoCAD插件开发多年的工程师,我深知选错开发环境会导致的…

2026/11/4 18:28:35

Zotero集成DeepL免费API实现学术文献自动翻译

1. 项目概述:为什么Zotero配DeepL不是“锦上添花”,而是文献处理的刚需闭环Zotero免费配置DeepL API密钥——这短短十一个字,背后站着的是每天被英文文献压得喘不过气的科研新手、赶DDL的硕博生、需要快速消化外文资料的行业研究员&#xff0…

2026/11/4 18:28:35

佳能IR1133 U盘打印功能开启全指南

1. 项目概述:为什么佳能IR1133的U盘打印功能像“被锁住的抽屉”? 你把U盘插进佳能IR1133复印机侧面那个标着USB图标的接口,屏幕亮了,显示“USB设备已连接”,可一按“扫描”或“打印”按钮,菜单里压根找不到…

2026/11/4 18:28:35

数据库约束详解:确保数据完整性的关键机制

1. 数据库约束:数据完整性的守护者 在数据库设计和管理中,约束(Constraints)就像交通规则对于城市道路系统一样重要。它们定义了数据必须遵守的规则,确保数据库中的数据始终保持准确、一致和可靠。想象一下&#xff0c…

2026/11/4 18:23:34

Jev技术解析:JSON Schema验证中间件原理与工程实践

我无法根据当前输入生成符合要求的博文。原因如下:项目正文为空:输入中项目正文: "",即没有任何实质性描述。而我的核心任务是“基于项目标题、项目正文、关键词和摘要描述”进行深度拆解与延展。没有正文,就失去了理解…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 0:03:20

AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年…

2026/11/4 0:03:20

从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你…

2026/11/4 0:03:20

32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑