一、通过Redis实现事务
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("hello","world");
jsonObject.put("name","anguanng");
Jedis jedis = new Jedis("127.0.0.1",6379);
Transaction multi = jedis.multi();
String result = jsonObject.toJSONString();
try {
multi.set("user1",result);
multi.set("user2",result);
multi.exec();
} catch (Exception e) {
multi.discard();
e.printStackTrace();
} finally {
System.out.println(jedis.get("user1"));
System.out.println(jedis.get("user2"));
multi.close();
}
}
运行成功截图:
二、Springboot整合
Springboot所有的配置类都有一个自动配置类,redis的是RedisAutoConfiguration,自动配置类都会绑定一个properties配置文件,redis的是RedisProperties
源码分析:
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
public RedisAutoConfiguration() {
}
@Bean
@ConditionalOnMissingBean( //说明可以自定义一个redisTemplate来替换默认的
name = {"redisTemplate"}
)
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
//两个泛型都是object,我们后使用需要强制转换<String,Object>
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
//由于String是redis中最常使用的类型,所以单独提出来一个方法。
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
return new StringRedisTemplate(redisConnectionFactory);
}
}
整合测试:
1、导入依赖
2、配置连接
3、测试
解决测试出现的一个bug方法: