Linux系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个web服务,经常出现网页无法打开、打开速度慢等现象,而遇到这些问题,就有人会抱怨Linux系统不好,其实这些都是表面现象。
Linux 提供三个「点分十进制字符串表示的 IPv4 地址和用网络字节序整数表示的 IPv4 地址之间转换」的接口
public GraceJSONResult doLogin(HttpServletRequest request,
HttpServletResponse response,
RegisterLoginBO registerLoginBO,
BindingResult result) {
// 判断BindingResult是否保存错误的验证信息,如果有,则直接return
if (result.hasErrors()) {
Map<String, String> errorMap = getErrors(result);
return GraceJSONResult.errorMap(errorMap);
}
// 获得前端传来的基本信息
String smsCode = registerLoginBO.getSmsCode();
String mobile = registerLoginBO.getMobile();
// 0. 校验验证码是否匹配
String redisSMSCode = redis.get(MOBILE_SMSCODE + mobile);
if (StringUtils.isBlank(redisSMSCode) || !redisSMSCode.equalsIgnoreCase(smsCode)) {
return GraceJSONResult.errorCustom(ResponseStatusEnum.SMS_CODE_ERROR);
}
return GraceJSONResult.ok();
}
用户信息其实并不会经常发生变动,所以这块内容完全可以放入缓存,这么一来可以大大减少对数据库的压力。
private AppUser getUser(String userId) {
// 1. 查询redis中是否包含用户信息,如果包含则查询redis返回,如果不包含则查询数据库
String userJson = redis.get(REDIS_USER_INFO + ":" + userId);
AppUser user = null;
if (StringUtils.isNotBlank(userJson)) {
user = JsonUtils.jsonToPojo(userJson, AppUser.class);
} else {
user = userService.getUser(userId);
// 2. 由于用户信息不怎么会变动,对于千万级别的网站,这类信息数据不会去查询数据库,完全可以把用户信息存入redis
// 哪怕修改信息,也不会立马体现,这也是弱一致性,在这里有过期时间,比如1天以后,用户信息会更新到页面显示,或者缩短到1小时,都可以
// 基本信息在新闻媒体类网站是属于数据一致性优先级比较低的,用户眼里看的主要以文章为主,至于文章是谁发的,一般来说不会过多关注
redis.set(REDIS_USER_INFO + ":" + userId, JsonUtils.objectToJson(user), 1);
}
return user;
}
虽然在表设计的时候把文章阅读数字段进行了设计,但是在大数据量下,文章阅读的累计并发是很高的,在这里我们也是采用redis的计数功能来进行实现。
@Override
public GraceJSONResult list(String articleId, Integer page, Integer pageSize) {
if (page == null) {
page = COMMON_START_PAGE;
}
if (pageSize == null) {
pageSize = COMMON_PAGE_SIZE;
}
PagedGridResult gridResult =
commentPortalService.queryArticleComments(articleId,
page,
pageSize);
return GraceJSONResult.ok(gridResult);
}
生成html的步骤分为以下几步:
定义freemarker生成的html位置
配置freemarker基本环境
获得ftl模板
获得动态数据
融合ftl和动态数据,并输出到html
@Value("${freemarker.html.target}")
private String htmlTarget;
@GetMapping("/createHTML")
@ResponseBody
public String createHTML(Model model) throws Exception {
// 0. 配置freemarker基本环境
Configuration cfg = new Configuration(Configuration.getVersion());
// 声明freemarker模板所需要加载的目录的位置
String classpath = this.getClass().getResource("/").getPath();
cfg.setDirectoryForTemplateLoading(new File(classpath + "templates"));
// System.out.println(htmlTarget);
// System.out.println(classpath + "templates");
// 1. 获得现有的模板ftl文件
Template template = cfg.getTemplate("stu.ftl", "utf-8");
// 2. 获得动态数据
String stranger = ;
model.addAttribute("there", stranger);
model = makeModel(model);
// 3. 融合动态数据和ftl,生成html
File tempDic = new File(htmlTarget);
if (!tempDic.exists()) {
tempDic.mkdirs();
}
Writer out = new FileWriter(htmlTarget + File.separator + "10010" + ".html");
template.process(model, out);
out.close();
return "ok";
}