Springboot2.X中使用Redis
使用redis之前,首先要安装redis服务,确保服务正常启动,redis-cli客户端能连接上。springboot集成redis上手快,简单几步就可以搞定。
首先,引入springboot集成redis的依赖:
springboot集成redis依赖坐标:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
其次,在项目的配置文件中配置redis:
redis: host: IP地址 port: 6379 timeout: 60s database: 1 pool: max-active: 100 max-idle: 10 max-wait: 100000
此处配置根据自身实际情况配置,在安装redis如果不是使用默认配置,可根据自己修改的内容进行配置。在springboot项目中使用RedisTemplate就可使用。
@Autowired private RedisTemplate redisTemplate;
但是这个调用的是redis自带的RedisTemplate,redistemplate默认key-value都是object类型,使用时都需要序列化使用,然而我们在开发过程中使用的多是key:String、value:object的类型,所以我们可以自己写个配置类,自定义RedisTemplate模板:
@Configuration public class RedisConfig { @SuppressWarnings("all") public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { // 我们为了自己开发方便,一般直接使用 <String, Object> RedisTemplate<String, Object> template = new RedisTemplate<String, Object>(); template.setConnectionFactory(factory); // Json序列化配置 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); // String 的序列化 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // key采用String的序列化方式 template.setKeySerializer(stringRedisSerializer); // hash的key也采用String的序列化方式 template.setHashKeySerializer(stringRedisSerializer); // value序列化方式采用jackson template.setValueSerializer(jackson2JsonRedisSerializer); // hash的value序列化方式采用jackson template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
为了更加方便,我们还可以自己写个Redis工具类:
@Slf4j @Component public class RedisUtil { @Autowired private RedisTemplate redisTemplate; /** * SET操作 * * @param key KEY * @param value VALUE * @return 是否成功 */ public boolean set(String key, String value) { try { redisTemplate.opsForValue().set(key, value); return true; } catch (Exception e) { log.error("redis set操作异常:" + e.getMessage()); return false; } } /** * GET操作 * * @param key KEY * @return VALUE */ public String get(String key) { try { String value = redisTemplate.opsForValue().get(key); return value; } catch (Exception e) { log.error("redis get操作异常:" + e.getMessage()); return null; } } }
使用示例:
@Slf4j @Service public class getTokenServiceImpl implements GetTokenService { @Autowired private RedisUtil redis; @Value("${xzqdm}") private String xzqdm; @Value("${ausername}") private String ausername; @Value("${password}") private String password; @Value("${url.getToken}") private String urlGetToken; @Override public ResTokenMes getToken() throws IOException { HttpClientUtil https= new HttpClientUtil(); GetHeadMes headMes = new GetHeadMes(); ........................此处省略若干代码 String result = https.sendHttpClient(url, tokenmap); ResTokenMes resTokenMes = JSONUtil.toBean(JSONUtil.toJsonStr(result), ResTokenMes.class); String token = resTokenMes.getData().getToken(); redis.set("token", token); return resTokenMes; } } @Slf4j @Service public class PushServiceImpl implements PushService { @Autowired private RedisUtil redis; @Autowired InfoMapper infoMapper; @Autowired @Qualifier("batchKafkaTemplate") private KafkaTemplate<Object, Object> batchKafkaTemplate; @Value("${kafka.topic.batch}") private String topic; @Value("${xzqdm}") private String xzqdm; @Value("${url.postXF}") private String urlPostXF; @Value("${url.postFK}") private String urlPostFK; @Override public R getApply() { //获取token String token = redis.get("token"); ....................此处省略若干代码 } }