问题:
我正在使用:
请提出解决此问题的解决方案。
答案 0 :(得分:2)
问题在this page中列出。来自文章:
我在Spring RedisTemplate类中启用Redis事务时学到了很多教训redisTemplate.setEnableTransactionSupport(true);: Redis在运行几天后开始返回垃圾数据,导致严重的数据损坏。 StackOverflow报告了类似的案例。
通过运行monitor命令,我的团队发现在Redis操作或RedisCallback之后,Spring并没有像它应该那样自动关闭Redis连接。重用未关闭的连接可能会从Redis中的意外密钥返回垃圾数据。有趣的是,在RedisTemplate中将事务支持设置为false时,此问题并未显示。
我们发现通过在Spring上下文中配置PlatformTransactionManager(例如DataSourceTransactionManager),然后使用@Transactional注释来声明Redis事务的范围,我们可以自动使Spring关闭Redis连接。
基于这种经验,我们认为在Spring上下文中配置两个单独的RedisTemplates是一个好习惯:在大多数Redis操作中使用一个事务设置为false的实例;启用事务的另一个仅适用于Redis事务。当然必须声明PlatformTransactionManager和@Transactional以防止返回垃圾值。
此外,我们了解了将Redis事务与关系数据库事务混合的缺点,在本例中为JDBC。混合交易的行为与您的预期不符。