个人网站性能优化经历访问文章功能优化
Posted exodus3
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了个人网站性能优化经历访问文章功能优化相关的知识,希望对你有一定的参考价值。
自己搭建了一个基于SpringBoot+Spring Security+MyBatis+mysql+Redis+Thymeleaf的博客网站
上线个人云服务器后,发现服务器访问慢。个人服务器是1核2G的,1M宽带,虽然服务器是低配的,但是可以通过优化代码,中间件等手段,来提升性能。
这篇主要讲访问文章功能优化
redis宕机了,可以用数据库来读取文章信息
redis有时候会宕机,就比如之前遭受到的黑客攻击,导致redis宕机了。或者遇到其他异常,导致redis无法正常访问。如果这个时候继续访问博客文章,那么代码走到 Object articleByRedis = redisService.getArticleOnRedis(“article”, articleId); 这里就会直接抛出异常,通常我们对异常的解决办法是:打印异常信息。然而,如果不能实时解决redis宕机异常的话,访问文章就会一直访问不到。有效的解决办法是:抛出异常的时候,继续用数据库来访问文章,这样就能获取文章信息了,即使没有及时解决redis宕机的问题。
JSONObject getArticleById(String articleId) {
long startTime = System.currentTimeMillis();
String username = null;
//取缓存
try {
Object articleByRedis = redisService.getArticleOnRedis("article", articleId);
if (articleByRedis != null) {
JSONObject jsonObject = JSONObject.fromObject(articleByRedis);
Object articleTitle = jsonObject.get("articleTitle");
logger.info("取缓存里面的文章:" + articleTitle);
dealWithSpendTime(startTime);
return jsonObject;
} else {
//取数据库
JSONObject articleByDB = articleService.getArticleByArticleId(Long.parseLong(articleId), username);
if (articleByDB != null) {
logger.info("取数据库里面的文章:{}", articleByDB.get("articleTitle"));
String status = (String)articleByDB.get("status");
if ("200".equals(status)) {
redisService.putArticleOnRedis("article", articleId, articleByDB);
logger.info("保存文章到缓存");
} else {
logger.info("没获取到文章,不用保存到缓存");
}
}
dealWithSpendTime(startTime);
return articleByDB;
}
} catch (Exception e) {
logger.error("取缓存报异常了:" + e.getMessage());
//取数据库
JSONObject articleByDB = articleService.getArticleByArticleId(Long.parseLong(articleId), username);
if (articleByDB != null) {
logger.info("有异常,读取数据库里面的文章");
}
dealWithSpendTime(startTime);
return articleByDB;
}
}
// 计算花费的时间
private void dealWithSpendTime(long startTime) {
long endTime = System.currentTimeMillis();
long spendTime = endTime - startTime;
if (spendTime < 1000) {
logger.info("读取这篇文章花费的时间为:" + spendTime + "毫秒");
} else {
logger.warn("****读取这篇文章花费的时间比较多****:" + spendTime / 1000 + "秒");
}
}
这段代码的主要逻辑是:先从redis读取文章,没获取到,从数据库读取,把读取到的信息保存到redis里。如果遇到redis宕机或者其他问题,那么捕抓异常之后,则从数据库读取,避免用户读取不到文章信息。
以上是关于个人网站性能优化经历访问文章功能优化的主要内容,如果未能解决你的问题,请参考以下文章