使用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"); ....................此處省略若干代碼 } }