手记

当你的Redis挂了之后你的网站还能正常运行吗

之前稍微了解过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捕获,然后记录报错,再进行正常读取数据库,效果十分扎眼,看下图:


效果大概就是回有很明显的停留时间,那一小段留白时间就是异常捕获的过程
效果十分的粗暴,而且不是很好,暂时我还没有找到合理的解决办法,所以记录一下这样的过程和效果,供参考。

0人推荐
随时随地看视频
慕课网APP