那jedis就是集成了redis的一些命令操作,封装了redis的java客户端。提供了连接池管理。一般不直接使用jedis,而是在其上在封装一层,作为业务的使用。
在Spring和SpringBoot中,内置封装了RedisTemplate和StringRedisTemplate。
两者配置不同,见个人项目seckill
redis:
host: 127.0.0.1
timeout: 100
port: 6379
password: null
lettuce: //用RedisTemplate和StringRedisTemplate的配置
pool:
max-wait: 10
max-active: 100
max-idle: 10
min-idle: 0
jedis: //用jedis方法的配置
pool:
max-active: 100
max-idle: 10
min-idle: 0
max-wait: 100000
注意采用RedisTemplate时需要更换序列化工具,不过比使用Jedis更加简洁
@Configuration
public class RedisTemplateForSpringBoot {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(
Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashKeySerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
logger.info("RedisTemplate序列化工具转换为:" + jackson2JsonRedisSerializer.getClass().getName());
return template;
}
}
注意此处必须采用 @Resource注解,@Autowired会报错(注入机制不同)
@Resource
private RedisTemplate<String, Seckill> redisTemplate;
@Autowired按byType自动注入,而@Resource默认按 byName自动注入
Github项目代码:https://github.com/ybeario/seckill