默认情况下,RedisTemplate不参与托管的Spring事务。如果希望RedisTemplate在使用@Transactional或TransactionTemplate时使用Redis事务,则需要通过设置setEnableTransactionSupport(true)显式启用对每个 RedisTemplate的事务支持。
启用事务支持将RedisConnection绑定到由ThreadLocal支持的当前事务。如果事务完成且没有错误,则使用EXEC提交Redis事务,否则使用DISCARD回滚。Redis事务是面向批处理的。在正在进行的事务期间发出的命令会排队,并且仅在提交事务时应用。
Spring Data Redis区分正在进行的事务中的只读和写入命令。只读命令(例如 KEYS)通过管道传输到新的(非线程绑定的)RedisConnection以允许读取。写入命令由RedisTemplate排队并在提交时应用。
(我暂时没有计划研究RedisTemplate结合@Transaction使用,因为对Spring的事务理解的并不是足够的透彻,出现问题后难以定位)