对比详解
1. RedisTemplate
- 功能:Spring Data Redis的核心模板类,提供对Redis的通用操作(如字符串、哈希、列表、集合等)。
- 使用场景:常规的Redis增删改查操作。
- 特点:
- 支持序列化配置(如
StringRedisSerializer
、Jackson2JsonRedisSerializer
)。 - 提供直接操作Redis命令的方法(如
opsForValue()
、opsForHash()
)。 - 不直接支持事务或批量操作的原子性。
- 支持序列化配置(如
2. RedisCallback
- 功能:回调接口,用于执行单次Redis操作,需通过
RedisTemplate.execute(RedisCallback)
调用。 - 使用场景:需要直接操作Jedis/Redisson客户端(如执行原生Redis命令或复杂逻辑)。
- 特点:
- 直接访问底层Redis连接(如
Jedis
或RedisConnection
)。 - 单次操作,需手动管理资源(如事务提交)。
- 示例:
String result = redisTemplate.execute(new RedisCallback<String>() {@Overridepublic String doInRedis(RedisConnection connection) {byte[] key = "myKey".getBytes();return new String(connection.get(key));} });
- 直接访问底层Redis连接(如
3. SessionCallback
- 功能:回调接口,用于在单个Redis会话中执行多个操作(支持事务或多命令原子性)。
- 使用场景:需要原子性操作(如多个命令需同时成功或失败)。
- 特点:
- 通过
RedisTemplate.execute(SessionCallback)
执行。 - 支持
multi/exec
模式(Redis事务)。 - 示例:
redisTemplate.execute(new SessionCallback<Object>() {@Overridepublic Object execute(RedisOperations operations) {operations.multi();operations.opsForValue().set("key1", "value1");operations.opsForValue().set("key2", "value2");return operations.exec();} });
- 通过
对比表格
特性 | RedisTemplate | RedisCallback | SessionCallback |
---|---|---|---|
核心功能 | 常规Redis操作 | 单次底层操作 | 多命令原子性操作 |
适用场景 | 简单增删改查 | 需直接操作Jedis/RedisConnection | 需事务或批量操作 |
是否支持事务 | 不直接支持 | 需手动管理 | 内置multi/exec 支持 |
操作粒度 | 单个命令 | 单个命令(通过回调扩展) | 多个命令组合 |
资源管理 | 自动管理 | 需手动处理(如事务提交) | 自动管理会话 |
使用方式 | 直接调用方法(如opsFor... ) | 通过execute(RedisCallback) | 通过execute(SessionCallback) |
总结
- RedisTemplate:常规操作首选,无需复杂配置。
- RedisCallback:需直接操作底层客户端或执行原生命令时使用。
- SessionCallback:需原子性操作或多命令组合时选择,简化事务管理。