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"); // 删除 key2. 字符串(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() |