为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Java

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

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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
31
获赞与收藏
154

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消