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() |