SpringBoot 结合 Spring Cache 操作 Redis 实现数据缓存(小豆丁技术栈)

一、缓存概念知识

1、是什么缓存

我们日常生活中,经常会接触听到缓存这个词,例如,浏览器清空缓存,处理器缓存大小,磁盘缓存等等。经过分类,可以将缓存分为:

  • 硬件缓存: 一般指的是机器上的 CPU、硬盘等等组件的缓存区间,一般是利用的内存作为一块中转区域,都通过内存交互信息,减少系统负载,提供传输效率。
  • 客户端缓存: 一般指的是某些应用,例如浏览器、手机App、视频缓冲等等,都是在加载一次数据后将数据临时存储到本地,当再次访问时候先检查本地缓存中是否存在,存在就不必去远程重新拉取,而是直接读取缓存数据,这样来减少远端服务器压力和加快载入速度。
  • 服务端缓存: 一般指远端服务器上,考虑到客户端请求量多,某些数据请求量大,这些热点数据经常要到数据库中读取数据,给数据库造成压力,还有就是 IO、网络等原因有一定延迟,响应客户端较慢。所以,在一些不考虑实时性的数据中,经常将这些数据存在内存中(内存速度非常快),当请求时候,能够直接读取内存中的数据及时响应。

Read More

SpringBoot 中使用 @Valid 注解 + Exception 全局处理器优雅处理参数验证(小豆丁技术栈)

一、为什么使用 @Valid 来验证参数

在平常通过 Spring 框架写代码时候,会经常写接口类,相信大家对该类的写法非常熟悉。在写接口时经常要写效验请求参数逻辑,这时候我们会常用做法是写大量的 ifif else 类似这样的代码来做判断,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@RestController
public class TestController {

@PostMapping("/user")
public String addUserInfo(@RequestBody User user) {
if (user.getName() == null || "".equals(user.getName()) {
......
} else if(user.getSex() == null || "".equals(user.getSex())) {
......
} else if(user.getUsername() == null || "".equals(user.getUsername())) {
......
} else {
......
}
......
}

}

这样的代码如果按正常代码逻辑来说,是没有什么问题的,不过按优雅来说,简直糟糕透了。不仅不优雅,而且如果存在大量的验证逻辑,这会使代码看起来乱糟糟,大大降低代码可读性,那么有没有更好的方法能够简化这个过程呢?答案当然是有,推荐的是使用 @Valid 注解来帮助我们简化验证逻辑。

Read More

SpringBoot 全局异常处理详解(小豆丁技术栈)

一、本文简介

       在使用 Spring 框架开发程序时经常要写接口,尤其现在 SpringBoot 更推荐用 Restful 风格来写接口,在我们写接口中经常遇见的问题就是调用接口后,执行逻辑过程中报错,产生一堆异常信息栈。遇见这种问题是程序错误处理过程中没有考虑全面,漏掉某些错误没有进行异常处理。

       在正常的情况下,我们都会使用 try-catch 来处理异常从而避免发生一些未知的错误导致的不必要的损失,而在 Spring 框架中,它有没有针对异常处理有一些好的方法呢?这个问题回答当然是肯定的,Spring 框架提供了异常处理器来处理通过 Controller 接口访问应用产生的异常,只需要配置和添加一些注解就可以处理通过 Controller 接口抛出的全部的异常。

Read More