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