最近做项目使用Spring自己封装的spring-data-redis(版本:spring-3.2,spring-data-redis-1.5,jedis-2.6),当使用redis的事务时,一直报"ERR EXEC without MULTI"错误,经过两天多的源码研究,发现问题在于redis的事务配置和源码实现上。
在使用redis配置的时候,如果需要开始redis的事务,一般会遇到以下两个属性的配置。然而事实上,当使用spring自己封装的RedisCacheManager时,是不需要配置RedisTemplate的enableTransactionSupport属性的,即RedisCacheManager的transactionAware=true,但RedisTemplate的enableTransactionSupport要等于默认值false,原因在下面分析中。
首先需要了解redis事务的机制是和数据库(如mysql)不一样的,具体网上有很多解释,借鉴http://www.runoob.com/redis/redis-transactions.html中的说明: