本文主要是介绍使用SpringCache缓存数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天学到一个新知识:SpringCache,刚开始项目是使用Redis来进行缓存数据,但是当进行数据库操作的时候,通常也需要对Redis缓存的数据进行操作,这就需要写很多的代码量。
然后就了解到了SpringCache,可以通过注解来把数据添加到缓存或者删除缓存中的数据。
SpringCache的使用
- springboot项目需要导入web依赖
<!--springboot项目进行web开发必不可少的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><scope>compile</scope></dependency>
- 在启动类中使用@EnableCaching注解开启缓存
package com.itheima;import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;@Slf4j
@SpringBootApplication
@EnableCaching
public class CacheDemoApplication {public static void main(String[] args) {SpringApplication.run(CacheDemoApplication.class,args);log.info("项目启动成功...");}
}
- 使用注解进行业务开发
package com.itheima.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.entity.User;
import com.itheima.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {@Autowiredprivate CacheManager cacheManager;@Autowiredprivate UserService userService;/*** CachePut:将方法返回值放入缓存* value:缓存的名称,每个缓存名称下面可以有多个key* key:缓存的key* @param user* @return*/@CachePut(value = "userCache",key = "#user.id")@PostMappingpublic User save(User user){userService.save(user);return user;}/*** CacheEvict:清理指定的缓存* value:缓存的名称,每个缓存名称下面可以有多个key* key:缓存的key*/@CacheEvict(value = "userCache",key = "#id")
// @CacheEvict(value = "userCache",key = "#p0") //第一个参数
// @CacheEvict(value = "userCache",key = "#root.args[0]") //第一个参数@DeleteMapping("/{id}")public void delete(@PathVariable Long id){userService.removeById(id);}/**** @param user* @return*/@CacheEvict(value = "userCache",key = "#user.id")
// @CacheEvict(value = "userCache",key = "#p0.id") //获取user中的id
// @CacheEvict(value = "userCache",key = "#root.args[0].id") //获取user中的id
// @CacheEvict(value = "userCache",key = "#result.id") //获取user中的id@PutMappingpublic User update(User user){userService.updateById(user);return user;}/*** Cacheable:先看缓存中有没有数据,如果有就不再执行sql* condition:条件,满足指定条件时才缓存数据* unless:满足条件则不缓存* @param id* @return*/
// @Cacheable(value = "userCache",key = "#id",condition = "#result != null ")@Cacheable(value = "userCache",key = "#id",unless = "#result == null ")@GetMapping("/{id}")public User getById(@PathVariable Long id){User user = userService.getById(id);return user;}/*** Cacheable* @param user* @return*/@Cacheable(value = "userCache",key = "#user.id + #user.name")@GetMapping("/list")public List<User> list(User user){LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(user.getId() != null,User::getId,user.getId());queryWrapper.eq(user.getName() != null,User::getName,user.getName());List<User> list = userService.list(queryWrapper);return list;}
}
这篇关于使用SpringCache缓存数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!