缓存三问 ???
-
什么是缓存?
客户端缓存
代理缓存
反向代理缓存
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引入必要依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
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<User,Long>{
// 将该方法的返回值存入缓存中,并在查询时先从缓冲中获取,获取不到,在到数据库中进行获取
@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
网友评论