《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"); // 删除 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<>() {@Overridepublic 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() |
