《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()
相关推荐
北城以北888818 小时前
Spring定时任务与Spring MVC拦截器
spring boot·spring·mvc
WizLC18 小时前
【Java】各种IO流知识详解
java·开发语言·后端·spring·intellij idea
Mr.朱鹏18 小时前
SQL深度分页问题案例实战
java·数据库·spring boot·sql·spring·spring cloud·kafka
星星不打輰18 小时前
SSM项目--SweetHouse 甜蜜蛋糕屋
java·spring·mybatis·ssm·springmvc
脸大是真的好~20 小时前
分布式锁-基于redis实现分布式锁(不推荐)- 改进利用LUA脚本(不推荐)前面都是原理 - Redisson分布式锁
redis·分布式·lua
山沐与山20 小时前
【Redis】Redis集群模式架构详解
java·redis·架构
不穿格子的程序员1 天前
Redis篇6——Redis深度剖析:从单机到集群,Redis高可用进化史
数据库·redis·集群·主从·高可用·哨兵
czlczl200209251 天前
高并发下的 Token 存储策略: Redis 与 MySQL 的一致性
数据库·redis·mysql
johnny2331 天前
Redis系列之各版本特性
redis
DemonAvenger1 天前
Redis发布订阅模式:打造实时消息通信系统的实践指南
数据库·redis·性能优化