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



![基于SpringBoot的高校办公与印章申请管理系统[源码免费+文档免费]-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/08/20260826153306-6a8f07321ad5d-220x150.png)

评论前必须登录!
注册