SpringBoot系列——cache缓存

前言
  日常开发中,缓存是解决数据库压力的一种方案,通常用于频繁查询的数据,例如新闻中的热点新闻,本文记录springboot中使用cache缓存。(文章转载自乐字节)

spring boot

工程结构

代码编写

pom引入依赖,引入cache缓存,数据库使用mysql,ORM框架用jpa

    
        org.springframework.boot
        spring-boot-starter-cache
    

    
    
        net.sf.ehcache
        ehcache
    

    
    
        org.springframework.boot
        spring-boot-starter-data-jpa
    

    
    
        mysql
        mysql-connector-java
    

配置文件
server.port=10010
spring.application.name=springboot-cache

spring.cache.type=ehcache
spring.cache.ehcache.config=classpath:/ehcache.xml
 ehcache.xml



















先写一个套tb_user表的CRUD代码

@RestController
@RequestMapping("/tbUser/")
public class TbUserController {
@Autowired
private TbUserService tbUserService;

//方便测试暂时改成GetMapping
@GetMapping("list")

// @PostMapping(“list”)
public List list(TbUser entityVo) {
return tbUserService.list(entityVo);
}

@GetMapping("get/{id}")
public TbUser get(@PathVariable("id")Integer id) {
    return tbUserService.get(id);
}

//方便测试暂时改成GetMapping
@GetMapping("save")

// @PostMapping(“save”)
public TbUser save(TbUser entityVo) {
return tbUserService.save(entityVo);
}

@GetMapping("delete/{id}")
public Integer delete( @PathVariable("id") Integer id) {
    return tbUserService.delete(id);
}

}
opjo实体类要实现序列化
@Entity
@Table(name = “tb_user”)
@Data
public class TbUser implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id;//表id

private String username;//用户名

private String password;//密码

private Date created;//创建时间

private Integer descriptionId;//关联详情id

}
serviceImpl中,使用注解来开启缓存
@Service
@Transactional
@CacheConfig(cacheNames = {“myCache”})
public class TbUserServiceImpl implements TbUserService{

@PersistenceContext
private EntityManager em;

@Autowired
private TbUserRepository tbUserRepository;

//@Cacheable缓存数据:key为userList,value为返回值List
@Cacheable(key = "'userList'")
@Override
public List list(TbUser entityVo) {
    System.out.println("获取list用户列表缓存数据,"+new Date());
    return tbUserRepository.findAll(Example.of(entityVo));
}

//@Cacheable缓存数据:key为参数id,value为返回值TbUser
@Cacheable(key = "#id")
@Override
public TbUser get(Integer id) {
    System.out.println("获取数据缓存,key:"+id);
    Optional optionalE = tbUserRepository.findById(id);
    if (!optionalE.isPresent()) {
        throw new RuntimeException("ID不存在!");
    }
    return optionalE.get();
}

//@CachePut缓存新增的或更新的数据到缓存,其中缓存的名称为people,数据的key是person的id
@CachePut(key = "#entityVo.id")
// @CacheEvict从缓存中删除key为参数userList的数据
@CacheEvict(key = "'userList'")
@Override
public TbUser save(TbUser entityVo) {
    System.out.println("新增/更新缓存,key:"+entityVo.getId());
    //entityVo传啥存啥,会全部更新
    return tbUserRepository.save(entityVo);
}

//清空所有缓存
@CacheEvict(allEntries=true)
@Override
public Integer delete(Integer id) {
    System.out.println("清空所有缓存");
    tbUserRepository.deleteById(id);
    return id;
}

}

PS:原先使用了这个jar包,有报错

      org.ehcache
      ehcache
      3.8.1
     

后面改成用上面“代码编写”里pom中引的jnet.sf.ehcache下面的ar

后记
  缓存除了能缓解数据库压力,还能做用户登录状态控制,例如:用户登录成功后cookie中保存颁发的token令牌设置永不过期,缓存存活时间也设置永不过期,发呆时间设置1天,这样只有用户在1天内有访问缓存接口,那他就可以一直保留登录状态,直至有其他业务将token或者缓存清掉。(文章转载自乐字节)

springboot使用cache缓存暂时先记录到这,后续有空再进行补充。

你可能感兴趣的:(Java,前端,SpringBoot)