《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()
相关推荐
huaiixinsi38 分钟前
Java 后端面试高频题整理(02)
java·开发语言·spring·面试·职场和发展·架构·maven
我只想困告1 小时前
day02-RabbitMQ 2026-05-14
java·spring·rabbitmq
Mahir082 小时前
Redis 分布式锁与 Redisson 深度解析:从原生实现到工业级解决方案
数据库·redis·分布式·缓存·面试
用户398346161202 小时前
Go-Spring 实战第 5 课 —— 配置来源:Reader、Provider、环境变量与命令行参数
spring·go
Full Stack Developme3 小时前
Spring Context 解析
java·spring·rpc
磊 子3 小时前
1.2内存的存储金字塔
java·开发语言·spring·操作系统
看我干嘛!3 小时前
Redis安装
数据库·redis·缓存
淘矿人3 小时前
Claude助力前端开发
java·数据库·git·python·sql·spring·database
happymaker06263 小时前
Spring学习日记——DAY07(SpringMVC)
java·学习·spring
Devin~Y4 小时前
大厂Java面试实录:Spring Boot/Cloud + Redis + Kafka + JVM + RAG(Spring AI)三轮追问(小Y翻车版)
java·jvm·spring boot·redis·spring cloud·kafka·mybatis