《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<>() {@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() |