第一步: 導入spring-boot-starter-cache模塊
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
第二步: @EnableCaching開啓緩存
@SpringBootApplication
@MapperScan("com.winter.mapper")
@EnableCaching //開啓緩存
//此處必須加包掃描
public class Start {
public static void main(String[] args) {
SpringApplication.run(Start.class, args);
}
}
第三步:bean序列化
注意UID,否則出現序列化錯誤
public class User implements Serializable
private static final long serialVersionUID = -1421786817532421671L;
第四步: 使用緩存註解
只要給service類/接口增加註解,spring會自動查詢緩存
@EnableCaching
//類通用註解
@CacheConfig(cacheNames = "user")
public interface UserService {
//新增緩存
@CachePut(key="#user.userId")
// 注意這裏方法返回值必須是User,否則查詢緩存出現類轉換異常int->User(之前我的返回值是int)
User addUser(User user);
//不同條件的查詢放在不同的緩存裏,否則會查詢到其他方法的緩存值
//這裏沒有指定key。key默認爲pageNum+pageSize的hash值
@Cacheable(cacheNames = "allUser")
List<User> findAllUser(int pageNum, int pageSize);
//查詢緩存
@Cacheable(key="#userId")
User selectByPrimaryKey(int userId);
//刪除緩存
@CacheEvict(key="#userId")
int deleteByPrimaryKey(int userId);
}
第五步:檢查方法返回值
方法返回值的類型,就是key對應的值的類型。如果多個方法共用一個cache且key相同。但是返回值類型不一致,則會造成類轉換異常。
測試結果
新增數據後,查詢,可以直接查詢到緩存種的值,不用查詢數據庫。 可以看到第二次查詢沒有sql語句 預編譯
配置文件
server:
port: 8080
spring:
datasource:
name: test
url: jdbc:mysql://127.0.0.1:3306/test
username: root
password: root
# 使用druid數據源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
thymeleaf:
cache: true
redis:
host: xx.xx.x.xxx
port: 6379
password: redis@123
mybatis:
mapper-locations: classpath:mapping/*.xml #注意:一定要對應mapper映射xml文件的所在路徑
type-aliases-package: com.winter.model # 注意:對應實體類的路徑
configuration:
#開啓下劃線到駝峯命名法的自動轉換,將數據庫字段根據駝峯規則自動注入到對象屬性
map-underscore-to-camel-case: true
logging:
level:
#打印SQL信息
com.winter.mapper: debug
debug: true
#觀察哪些配置類生效
#pagehelper分頁插件
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
pom文件
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>