欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

当你的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捕获,然后记录报错,再进行正常读取数据库,效果十分扎眼,看下图:

当你的Redis挂了之后你的网站还能正常运行吗
效果大概就是回有很明显的停留时间,那一小段留白时间就是异常捕获的过程