Spring Data Redis笔记

3 篇文章 0 订阅

https://docs.spring.io/spring-data/redis/docs/current/reference/html

一.Redis事务

和redis一样RedisTemplate也提供了 multi, exec, discard 相应命令的支持。RedisTemplate不会保证事务中所有操作都是在相同的connection中,一定要在相同连接中可以使用SessionCallback来执行多个操作。

List<Object> txResults = redisTemplate.execute(new SessionCallback<List<Object>>() {
  public List<Object> execute(RedisOperations operations) throws DataAccessException {
    operations.multi();
    operations.opsForSet().add("key", "value1");

    // This will contain the results of all operations in the transaction
    return operations.exec();
  }
});
System.out.println("Number of items added to set: " + txResults.get(0));
二.添加@Transactional支持

RedisTemplate默认不由spring事务管理,通过RedisTemplatesetEnableTransactionSupport(true) 可以开启支持。启用事务支持会将 RedisConnection 通过 ThreadLocal 绑定到当前事务。事务完成并且没报错时,Redis事务执行EXEC提交,否则执行DISCARD回滚。事务执行期间Redis写命令都会放入RedisTemplate的队列中,当事务提交时批量应用,读命令会直接执行。

配置例子:

@Configuration
@EnableTransactionManagement                                 
public class RedisTxContextConfiguration {

  @Bean
  public StringRedisTemplate redisTemplate() {
    StringRedisTemplate template = new StringRedisTemplate(redisConnectionFactory());
    // explicitly enable transaction support
    template.setEnableTransactionSupport(true);              
    return template;
  }

  @Bean
  public RedisConnectionFactory redisConnectionFactory() {
    // jedis || Lettuce
  }

  @Bean
  public PlatformTransactionManager transactionManager() throws SQLException {
    return new DataSourceTransactionManager(dataSource());   
  }

  @Bean
  public DataSource dataSource() throws SQLException {
    // ...
  }
}

Configures a Spring Context to enable declarative transaction management.
Configures RedisTemplate to participate in transactions by binding connections to the current thread.
Transaction management requires a PlatformTransactionManager. Spring Data Redis does not ship with a PlatformTransactionManager implementation. Assuming your application uses JDBC, Spring Data Redis can participate in transactions by using existing transaction managers.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值