SpringBoot缓存

缓存三问 ???

  • 什么是缓存?

    客户端缓存
    代理缓存
    反向代理缓存
    Web服务器端缓存
    详细参考:https://blog.csdn.net/xiao672585132/article/details/7178224
  • 为什么要用缓存?

如果所有操作都是对数据库进行操作,那么势必会对数据库造成很大压力,这时候如果把热点放到缓存中是一个不错的选择。缓存还可以进行临时数据的存放,比如短时验证码之类的。

  • 如今流行的缓存技术?

    Redis、EhCache 2.x 、Generic、JCache (JSR-107)、Hazelcast、Infinispan、Guava、Simple

关于JSR-107标准

JSR-107

实例

pom.xml引入必要依赖

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

UserRepository.java

package com.inverseli.learning.domain;

import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

/**
 * @author liyuhao
 * @date 2018年9月30日上午10:07:12
 */
@CacheConfig(cacheNames = "Users") // 缓存在名为Users的对象中
public interface UserRepository extends JpaRepository{
    // 将该方法的返回值存入缓存中,并在查询时先从缓冲中获取,获取不到,在到数据库中进行获取
    @Cacheable 
    User findByName(String name);
    
    User findByNameAndAge(String name,Integer age);
    @Query("from User u where u.name=:name")
    User findUser(@Param("name") String name);
}

注解详解

@Cacheable: 将该方法的返回值存入缓存中,并在查询时先从缓冲中获取,获取不到,在到数据库中进行获取
@CachePut: 配置于函数上,能够根据参数定义条件来进行缓存,它与@Cacheable不同的是,它每次都会真是调用函数,所以主要用于数据新增和修改操作上。意思就是说无论缓存中是否有数据,我都要进行方法执行,进行缓存中数据的更新。
@CacheEvict: 配置于函数上,通常用在删除方法上,用来从缓存中移除相应数据。除了同@Cacheable一样的参数之外,它还有下面两个参数:
allEntries:非必需,默认为false。当为true时,会移除所有数据
beforeInvocation:非必需,默认为false,会在调用方法之后移除数据。当为true时,会在调用方法之前移除数据。

参考 - http://blog.didispace.com/springbootcache1/
完整实例 - https://github.com/Inverseli/SpringBoot-Learning/tree/master/learning4-4-1

你可能感兴趣的:(SpringBoot缓存)