原因:如果执行的是读操作,由于连接对象不是代理对象,读操作并不会重新创建一个连接,而是使用当前连接,并且放在事务中运行,因此读操作并不会立即执行而是等到事务提交时才能执行,导致读操作读取的结果为nul
解决方案:获取的时候释放一下资源
@Autowired
private RedisTemplate redisTemplate ;
@Test
@Transactional
public void test1(){
//方法一:设置redis不开启事务
// redisTemplate.setEnableTransactionSupport(false);
//方法二:释放资源
RedisConnectionUtils.unbindConnection(redisTemplate.getConnectionFactory());
System.out.println(redisTemplate.boundSetOps("blindBoxGoods:2").members().size());
}
实际应用场景中发现:
方案一:第一次获取数据 size=0 ,第二次为正确值(第一次请求取值为空,然后前端再次请求就有值了,单元测试未发现问题),暂还未知道原因
方案二:未在实际场景中使用,大家可以试一下
最后解决:通过业务层面解决了问题(多人参与,不好采用别的框架)(或采用Redission)
版权声明:本文为weixin_44823155原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。