做平台网站多少钱,wordpress查看jquery版本号,iis网站开发教程,个人主页制作【Spring连载】使用Spring Data访问Redis#xff08;十一#xff09;----Redis事务 Transactions Transactional 支持 Redis通过multi, exec 和 discard命令为事务提供支持。RedisTemplate上提供了这些操作。但是#xff0c;RedisTemplate不能保证使用相同的连接运行事务中的… 【Spring连载】使用Spring Data访问Redis十一----Redis事务 Transactions Transactional 支持 Redis通过multi, exec 和 discard命令为事务提供支持。RedisTemplate上提供了这些操作。但是RedisTemplate不能保证使用相同的连接运行事务中的所有操作。 Spring Data Redis提供了SessionCallback接口以便在需要使用同一连接执行多个操作时使用例如在使用Redis事务时。以下示例使用multi方法 //execute a transaction
ListObject txResults redisOperations.execute(new SessionCallbackListObject() {public ListObject execute(RedisOperations operations) throws DataAccessException {operations.multi();operations.opsForSet().add(key, value1);// This will contain the results of all operations in the transactionreturn operations.exec();}
});
System.out.println(Number of items added to set: txResults.get(0));RedisTemplate使用它的value、hash key和hash value序列化器在返回之前对exec的所有结果进行反序列化。还有一个额外的exec方法它允许你为事务结果传递自定义序列化器。
Transactional 支持
默认情况下RedisTemplate不参与Spring事务。如果你希望RedisTemplate在使用Transactional或TransactionTemplate时使用Redis事务则需要通过设置setEnableTransactionSupport(true)来显式启用对每个RedisTemplate的事务支持。启用事务支持将RedisConnection绑定到ThreadLocal支持的当前事务。如果事务完成时没有出现错误Redis事务将使用EXEC提交否则将使用DISCARD回滚。Redis事务是面向批batch-oriented的。在正在进行的事务期间发出的命令将排队并且仅在提交事务时应用。 Spring Data Redis区分正在进行的事务中的只读命令和写入命令。只读命令如KEYS通过管道传输到新的非线程绑定的RedisConnection以允许读取。写入命令由RedisTemplate排队并在提交时应用。 以下示例显示了如何配置事务管理 例1: 启用事务管理的配置
Configuration
EnableTransactionManagement --------1
public class RedisTxContextConfiguration {Beanpublic StringRedisTemplate redisTemplate() {StringRedisTemplate template new StringRedisTemplate(redisConnectionFactory());// explicitly enable transaction supporttemplate.setEnableTransactionSupport(true); --------2 return template;}Beanpublic RedisConnectionFactory redisConnectionFactory() {// jedis || Lettuce}Beanpublic PlatformTransactionManager transactionManager() throws SQLException {return new DataSourceTransactionManager(dataSource()); ---------3}Beanpublic DataSource dataSource() throws SQLException {// ...}
}
1. 配置Spring上下文以启用声明性事务管理。
2. 将RedisTemplate配置为通过将连接绑定到当前线程来参与事务。
3. 事务管理需要PlatformTransactionManager。Spring Data Redis未附带PlatformTransactionManager实现。假设你的应用程序使用JDBCSpring Data Redis可以通过使用现有的事务管理器来参与事务。下面的例子分别演示了一个用法约束: 例2: 使用约束
// must be performed on thread-bound connection
template.opsForValue().set(thing1, thing2);// read operation must be run on a free (not transaction-aware) connection
template.keys(*);// returns null as values set within a transaction are not visible
template.opsForValue().get(thing1);