《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()
相关推荐
雨中飘荡的记忆6 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
用户83071968408210 小时前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
曲幽15 小时前
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
redis·python·fastapi·web·httpx·lock·asyncio
NE_STOP4 天前
springMVC-HTTP消息转换器与文件上传、下载、异常处理
spring
JavaGuide4 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
玹外之音4 天前
Spring AI MCP 实战:将你的服务升级为 AI 可调用的智能工具
spring·ai编程
来一斤小鲜肉5 天前
Spring AI入门:第一个AI应用跑起来
spring·ai编程
NE_STOP5 天前
springMVC-常见视图组件与RESTFul编程风格
spring
what丶k5 天前
Spring AI 多模态开发全解析:从入门到企业级落地
后端·spring·ai编程