缓存概念
是一种介于数据永久存储介质与数据应用之间的数据临时存储介质,即数据库和app之间
可以有效减少低速数据读取过程的次数,提高系统性能
可以设置多级缓存
缓存不是只缓存数据库中数据,比如验证码,也会缓存这类临时数据
springboot提供的缓存技术除了提供默认的缓存方案,还可以对其他缓存技术进行整合、统一接口、方便缓存技术的开发与发展。
利用HashMap模拟简单的缓存
@Service
public class BookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService {
@Autowired
BookDao bookDao;
private HashMap<Integer,Book> cache = new HashMap();
@Override
public Book getById(Integer id) {
//如果缓存中没有本次查询的数据,则进行查询,否则直接从缓存中获取数据返回
Book book = cache.get(id);
if(book == null){
Book quertbook = bookDao.selectById(id);
cache.put(id,quertbook);
return quertbook;
}
Book book1 = cache.get(id);
return book1;
}
}
利用缓存模拟简单的短信验证码
@Service
public class MsgServiceImpl implements MsgService {
private HashMap<String,String> cache = new HashMap<String,String>();
@Override
public String get(String tele) {
String code = tele.substring(tele.length() - 6);
cache.put(tele,code);
return code;
}
@Override
public boolean check(String tele, String code) {
String querycode = cache.get(tele);
return code.equals(querycode);
}
}
@RestController
@RequestMapping("/msg")
public class MsgController {
@Autowired
private MsgService msgService;
@PostMapping
public boolean check(String tel,String code) throws IOException{
boolean check = msgService.check(tel, code);
return check;
}
@GetMapping("/{tel}")
public String getById(@PathVariable String tel) {
return msgService.get(tel);
}
}
springboot提供默认的缓存技术
- 启用缓存
- 设置进入缓存的数据
- 设置读取缓存的数据
1. 导入缓存对应的pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
2. 启动类上启动缓存
@SpringBootApplication
@EnableCaching //开启缓存
public class SSMPApplication {
public static void main(String[] args) {
SpringApplication.run(SSMPApplication.class, args);
}
}
3.设置当前操作的结果数据进入缓存
@Override
@Cacheable(value="cacheSpace",key = "#id")
public Book getById(Integer id) {
Book queryBook = bookDao.selectById(id);
return queryBook;
}