《RedisTemplate 核心操作全解析》

RedisTemplate 是 Spring Data Redis 提供的核心类,用于操作 Redis 数据库。它封装了各种数据类型的操作,支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(ZSet)等结构。


RedisTemplate 常用接口分类

1. 通用操作(Key 相关)

方法 说明
Boolean hasKey(K key) 检查 key 是否存在
Boolean delete(K key) 删除 key
Boolean expire(K key, long timeout, TimeUnit unit) 设置 key 过期时间
Long getExpire(K key) 获取 key 剩余过期时间(秒)
Set<K> keys(K pattern) 按模式匹配 keys(如 user:*
void rename(K oldKey, K newKey) 重命名 key

示例:

java

复制代码
redisTemplate.hasKey("user:1"); // 检查 key 是否存在
redisTemplate.expire("user:1", 10, TimeUnit.MINUTES); // 设置 10 分钟过期
redisTemplate.delete("user:1"); // 删除 key

2. 字符串(String)操作

方法 说明
ValueOperations<K, V> opsForValue() 获取字符串操作对象
void set(K key, V value) 存储字符串
V get(K key) 获取字符串
Long increment(K key, long delta) 自增(适用于数值)
Boolean setIfAbsent(K key, V value) 仅当 key 不存在时设置(类似 SETNX
void multiSet(Map<? extends K, ? extends V> map) 批量存储

示例:

java

复制代码
ValueOperations<String, String> ops = redisTemplate.opsForValue();
ops.set("name", "Alice"); // 存储
String name = ops.get("name"); // 获取
ops.increment("counter", 1); // 自增

3. 哈希(Hash)操作

方法 说明
HashOperations<K, HK, HV> opsForHash() 获取哈希操作对象
void put(K key, HK hashKey, HV value) 存储哈希字段
HV get(K key, HK hashKey) 获取哈希字段
Map<HK, HV> entries(K key) 获取整个哈希表
Long delete(K key, Object... hashKeys) 删除哈希字段
Boolean hasKey(K key, Object hashKey) 检查哈希字段是否存在

示例:

java

复制代码
HashOperations<String, String, String> ops = redisTemplate.opsForHash();
ops.put("user:1", "name", "Bob"); // 存储
String name = ops.get("user:1", "name"); // 获取
Map<String, String> user = ops.entries("user:1"); // 获取整个哈希

4. 列表(List)操作

方法 说明
ListOperations<K, V> opsForList() 获取列表操作对象
Long leftPush(K key, V value) 左插入(LPUSH)
Long rightPush(K key, V value) 右插入(RPUSH)
V leftPop(K key) 左弹出(LPOP)
V rightPop(K key) 右弹出(RPOP)
List<V> range(K key, long start, long end) 获取列表范围(LRANGE)

示例:

java

复制代码
ListOperations<String, String> ops = redisTemplate.opsForList();
ops.leftPush("tasks", "task1"); // 左插入
String task = ops.leftPop("tasks"); // 左弹出
List<String> tasks = ops.range("tasks", 0, -1); // 获取全部

5. 集合(Set)操作

方法 说明
SetOperations<K, V> opsForSet() 获取集合操作对象
Long add(K key, V... values) 添加元素(SADD)
Set<V> members(K key) 获取所有元素(SMEMBERS)
Boolean isMember(K key, Object value) 判断元素是否存在(SISMEMBER)
Long remove(K key, Object... values) 删除元素(SREM)

示例:

java

复制代码
SetOperations<String, String> ops = redisTemplate.opsForSet();
ops.add("tags", "java", "redis"); // 添加元素
Set<String> tags = ops.members("tags"); // 获取所有元素
boolean exists = ops.isMember("tags", "java"); // 判断是否存在

6. 有序集合(ZSet)操作

方法 说明
ZSetOperations<K, V> opsForZSet() 获取有序集合操作对象
Boolean add(K key, V value, double score) 添加元素(ZADD)
Set<V> range(K key, long start, long end) 按索引范围获取(ZRANGE)
Set<V> rangeByScore(K key, double min, double max) 按分数范围获取
Long rank(K key, Object value) 获取元素排名(升序)
Long reverseRank(K key, Object value) 获取元素排名(降序)

示例:

java

复制代码
ZSetOperations<String, String> ops = redisTemplate.opsForZSet();
ops.add("leaderboard", "user1", 100); // 添加元素
Set<String> top3 = ops.range("leaderboard", 0, 2); // 获取前 3 名
Long rank = ops.rank("leaderboard", "user1"); // 获取排名

进阶用法

1. 事务支持

java

复制代码
redisTemplate.execute(new SessionCallback<>() {
    @Override
    public Object execute(RedisOperations operations) {
        operations.multi(); // 开启事务
        operations.opsForValue().set("a", "1");
        operations.opsForValue().set("b", "2");
        return operations.exec(); // 提交事务
    }
});

2. 发布/订阅(Pub/Sub)

java

复制代码
redisTemplate.convertAndSend("channel", "Hello Redis!"); // 发布消息

3. Lua 脚本执行

java

复制代码
DefaultRedisScript<Long> script = new DefaultRedisScript<>("return redis.call('get', KEYS[1])", Long.class);
Long result = redisTemplate.execute(script, Collections.singletonList("key"));

总结

数据类型 操作接口 示例
Key redisTemplate.hasKey() 检查 key 是否存在
String opsForValue() set(), get()
Hash opsForHash() put(), get(), entries()
List opsForList() leftPush(), range()
Set opsForSet() add(), members()
ZSet opsForZSet() add(), range()
相关推荐
heartbeat..5 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
Jing_jing_X6 小时前
AI分析不同阶层思维 二:Spring 的事务在什么情况下会失效?
java·spring·架构·提升·薪资
程序猿零零漆10 小时前
Spring之旅 - 记录学习 Spring 框架的过程和经验(十一)基于XML方式、注解的声明式事务控制、Spring整合Web环境
xml·学习·spring
短剑重铸之日12 小时前
《SpringBoot4.0初识》第五篇:实战代码
java·后端·spring·springboot4.0
heartbeat..12 小时前
Spring MVC 全面详解(Java 主流 Web 开发框架)
java·网络·spring·mvc·web
CUIYD_198912 小时前
Freemarker 无法转译 & 字符
java·开发语言·spring
天意pt13 小时前
Blog-SSR 系统操作手册(v1.0.0)
前端·vue.js·redis·mysql·docker·node.js·express
柒.梧.14 小时前
SSM常见核心面试问题深度解析
java·spring·面试·职场和发展·mybatis
DemonAvenger17 小时前
Redis慢查询分析与优化:性能瓶颈排查实战指南
数据库·redis·性能优化
Li_yizYa17 小时前
Redis-常见数据类型及应用场景
java·数据库·redis