当你的Redis挂了之后你的网站还能正常运行吗
程序员文章站
2022-07-10 18:13:41
...
之前稍微了解过Redis理解Redis的作用,并且对Redis的使用进行了尝试,确实可以提高网站的加载速度,但是当Redis没有工作时,网站就异常了,这里我希望实现的是,当Redis挂了,我的网站仍可以正常运行,无非就是穿透过去,直接读取数据库呗。先上代码:
public List<Address> getfiliale() {
// 定义redis的key
String key = FILIALE_KEY;
// 返回分公司地址
List<Address> addressList = null;
// 定义jackson数据转换操作类
ObjectMapper mapper = new ObjectMapper();
try {
if (!jedisKeys.exists(key)) {
// 若不存在,则从数据库里面取出相应数据
addressList = addressDao.queryAddot();
// 将相关的实体类集合转换成string,存入redis里面对应的key中
String jsonString = null;
try {
jsonString = mapper.writeValueAsString(addressList);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
jedisStrings.set(key, jsonString);
} else {
// 若存在,则直接从redis里面取出相应数据
String jsonString = jedisStrings.get(key);
// 指定要将string转换成的集合类型
JavaType javaType = mapper.getTypeFactory().constructParametricType(ArrayList.class, Address.class);
try {
// 将相关key对应的value里的的string转换成对象的实体类集合
addressList = mapper.readValue(jsonString, javaType);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (Exception e) {
logger.error(e.getMessage());
addressList = addressDao.queryAddot();
}
return addressList;
}
实现原理可以说非常粗暴了,就是当发生异常时,用catch捕获,然后记录报错,再进行正常读取数据库,效果十分扎眼,看下图:
效果大概就是回有很明显的停留时间,那一小段留白时间就是异常捕获的过程
上一篇: 【Java 7】今天,你寻宝了吗?