springboot 緩存ehcache的簡單使用

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

步驟:

1. pom文件中加 maven jar包:

?

 <!-- ehcache 緩存 --><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId></dependency>

?

 <!--開啟緩存支持--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>

?

2. 新增一個配置文件 ehcache.xml,放在resource 下面,springboot會自動掃描 :

?

<?xml version="1.0" encoding="UTF-8"?>
<ehcache><!--ehcache 緩存--><cache name="department" maxElementsInMemory="1000" />
</ehcache>

更多配置參考:

<ehcache><!--ehcache 緩存--><cache name="department"maxElementsInMemory="100000"eternal="true"overflowToDisk="true"maxElementsOnDisk="10000000"diskPersistent="true"memoryStoreEvictionPolicy="LRU"/><defaultCacheeternal="false"maxElementsInMemory="10000"overflowToDisk="false"diskPersistent="false"timeToIdleSeconds="0"timeToLiveSeconds="600"memoryStoreEvictionPolicy="LRU"/></ehcache>

?

3. ?在 main 方法上加上注解 @EnableCaching,開啟緩存的使用:

@EnableCaching // 開啟緩存使用
@SpringBootApplication
public class Application { // extends SpringBootServletInitializerpublic static void main(String[] args) {SpringApplication application = new SpringApplication(Application.class, "classpath*:/spring/security-*.xml");application.setWebEnvironment(true);application.run(args);}/***  HOW TO MAKE A SPRING BOOT JAR INTO A WAR TO DEPLOY ON TOMCAT*/
//	@Override
//	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
//		// Customize the application or call application.sources(...) to add sources
//
//		application.sources(Application.class);
//		return application;
//	}}

4. 在方法中運用注解,實現緩存的 增、刪、改、查

?

只要在方法上加上對應注解就可以了。

@Cacheable 查:?如果有就直接緩存中取 沒有就數據庫查并放入緩存。加上這個注解,調用這個方法就可以取到緩存中的值。

@CacheEvict?新增、刪除、修改 :會自動清除緩存中內容。加上這注解,對數據庫的update、add、delete操作都會清除對應緩存。

?

如:緩存名為“ department ”,當調用此方法時會先判斷是否有緩存。有則不進入方法,直接返回緩存中的值。無緩存名為 “department” 的緩存才會進入方法內部,執行數據庫查詢。

    @Override@Cacheable(value = "department")public List<Department> getDepartmentList() {System.out.println("--------------------------------緩存查詢:查查查-樹樹樹\n");List<Department> departmentList = departmentRepository.findAll(new Sort(Sort.Direction.ASC, "id"));return (List<Department>) buildDepartmentTree(departmentList, null);}

?

可以給緩存中的具體項起個鍵值:key

  @Override@Cacheable(value = "department", key = "#departmentId")public Object findOne(String departmentId) {return departmentRepository.findOne(departmentId);}

?

當緩存key沒有全部命中時,要確保緩存全部清除,就要加上

 allEntries = true ,默認為false 
  @Override@Transactional(readOnly = false)@CacheEvict(value = "department", allEntries = true) // 新增、刪除、修改 all is it.public Object updateDepartmentById(String id, Department departmentDto) {Department department = departmentRepository.findOne(id);if (department == null) {return "不存在該部門";}BeanHelper.mapPartOverrider(department, departmentDto);departmentRepository.save(department);return department;}

?

?

?

spring提供了4個注解來聲明緩存規則(又是使用注解式的AOP的一個生動例子),如表。

這里寫圖片描述

?

事實上,新增、刪除、修改都可以用@CacheEvict ,不建議使用 @ CachePut ,用法完全如上查的方法,只是注解名字不一樣。

?

// 查:存key為cache_department 的數據緩存到departmentList中,如果沒有指定key則方法參數作為key保存到緩存中。department只是緩存的名字。
//不指定 key 會默認使用參數名或者方法名,作為緩存的key。

?

?

?

5. 測試

第一次訪問是沒有緩存的,執行sql從數據庫查,執行了查詢方法,輸出寫在方法中的輸出語句。

?

?

?

第二次訪問,已有緩存,不進入方法,直接從緩存得數據并作為方法的返回值,不運行sql。如下:

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450275.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring boot + mybatis plus 快速構建項目,生成基本業務操作代碼。

---進行業務建表&#xff0c;這邊根據個人業務分析&#xff0c;不具體操作 --加入mybatis plus pom依賴 <!-- mybatis-plus 3.0.5--> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>&l…

給手機瀏覽器減負 輕裝上陣才能速度制勝

隨著手機瀏覽器的發展&#xff0c;瀏覽器已經變得臃腫不堪&#xff0c;各種“功能”系于一身&#xff0c;有廣告、社區、樂園等等&#xff0c;我們真的需要它們嗎&#xff1f;如何才能讓瀏覽器做到輕裝上陣&#xff0c;又能高效滿足我們需求呢&#xff1f; 過多“功能”的瀏覽器…

653. Two Sum IV - Input is a BST

題目來源&#xff1a; 自我感覺難度/真實難度&#xff1a; 題意&#xff1a; 分析&#xff1a; 自己的代碼&#xff1a; class Solution(object):def findTarget(self, root, k):""":type root: TreeNode:type k: int:rtype: bool"""Allself.InO…

解決 dubbo問題:Forbid consumer 192.xx.xx.1 access service com.xx.xx.xx.rpc.api.xx from registry 116.xx1

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我的情況是&#xff1a; 原本我把服務放在A工程中&#xff0c;后來改到B工程中了&#xff0c;所以原來的服務不存在了&#xff0c;查不…

vue學習:7、路由跳轉

2019獨角獸企業重金招聘Python工程師標準>>> <body><div id"app"></div></body><script type"text/javascript">var Login {template: <div>我是登陸界面</div>};var Register {template: <div…

Spring Retry 重試機制實現及原理

概要 Spring實現了一套重試機制&#xff0c;功能簡單實用。Spring Retry是從Spring Batch獨立出來的一個功能&#xff0c;已經廣泛應用于Spring Batch,Spring Integration, Spring for Apache Hadoop等Spring項目。本文將講述如何使用Spring Retry及其實現原理。 背景 重試&…

inline 內聯函數詳解 內聯函數與宏定義的區別

一、在C&C中   一、inline 關鍵字用來定義一個類的內聯函數&#xff0c;引入它的主要原因是用它替代C中表達式形式的宏定義。表達式形式的宏定義一例&#xff1a;#define ExpressionName(Var1,Var2) ((Var1)(Var2))*((Var1)-(Var2))為什么要取代這種形式呢&#xff0c;且…

Oracle序列更新為主鍵最大值

我們在使用 Oracle 數據庫的時候&#xff0c;有時候會選擇使用自增序列作為主鍵。但是在開發過程中往往會遇到一些不規范的操作&#xff0c;導致表的主鍵值不是使用序列插入的。這樣在數據移植的時候就會出現各種各樣的問題。當然數據庫主鍵不使用序列是一種很好的方式&#xf…

dubbo forbid service的解決辦法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 017-05-31 10:36:54.523 [http-nio-8080-exec-5] ERROR c.h.pdl.web.APIExceptionHandler - Unknown Exception, URI /payday-loan-co…

用SSH登錄遠程的機器,在遠程機器上執行本地機器上的腳本

假設本地的機器IP為10.245.111.90&#xff0c;我們想要在10.245.111.93上執行一個保存在10.245.111.90上的腳本。經過測試通過的命令如下&#xff1a;ssh root10.245.111.93 bash -s < /root/testlocal.sh如果要帶參數的話&#xff0c;那就需要參考這篇文章中描述的代碼了。…

golang學習之旅(1)

這段時間我開始了golang語言學習&#xff0c;其實也是為了個人的職業發展的拓展和衍生&#xff0c;語言只是工具&#xff0c;但是每個語言由于各自的特點和優勢&#xff0c;golang對于當前編程語言的環境&#xff0c;是相對比較新的語言&#xff0c;對于區塊鏈&#xff0c;大數…

為什么要在Linux平臺上學C語言?用Windows學C語言不好嗎?

用Windows還真的是學不好C語言。C語言是一種面向底層的編程語言&#xff0c;要寫好C程序&#xff0c;必須對操作系統的工作原理非常清楚&#xff0c;因為操作系統也是用C寫的&#xff0c;我們用C寫應用程序直接使用操作系統提供的接口&#xff0c;Linux是一種開源的操作系統&am…

數據庫中Schema(模式)概念的理解

在學習SQL的過程中&#xff0c;會遇到一個讓你迷糊的Schema的概念。實際上&#xff0c;schema就是數據庫對象的集合&#xff0c;這個集合包含了各種對象如&#xff1a;表、視圖、存儲過程、索引等。為了區分不同的集合&#xff0c;就需要給不同的集合起不同的名字&#xff0c;默…

linux系統中打rz命令后出現waiting to receive.**B0100000023be50

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 linux系統中打rz命令后出現 waiting to receive.**B0100000023be50 而沒有出現選擇文件彈出框是什么問題&#xff1a; 我本來用的是 gi…

golang學習之旅(2)- go的數據基本數據類型及變量定義方式

叮鈴鈴&#xff0c;這不有人在評論問下一篇何時更新&#xff0c;這不就來了嘛&#xff0c;&#x1f604; 今天我們說說golang 的基本數據類型 基本類型如下&#xff1a; //基本類型 布爾類型&#xff1a;bool 即true 、flase 類似于java中的boolean 字符類型&#xff1a;s…

StackExchange.Redis 官方文檔(六) PipelinesMultiplexers

流水線和復用 糟糕的時間浪費。現代的計算機以驚人的速度產生大量的數據&#xff0c;而且高速網絡通道(通常在重要的服務器之間同時存在多個鏈路)提供了很高的帶寬&#xff0c;但是計算機花費了大量的時間在 等待數據 上面&#xff0c;這也是造成使用持久性鏈接的編程方式越來越…

開發優秀產品的六大秘訣

摘要&#xff1a;本文是Totango的聯合創始人兼公司CEO Guy Nirpaz發表在Mashable.com上的文章。無論是在哪個行業&#xff0c;用戶永遠是一款產品的中心&#xff0c;本文作者就以用戶為中心&#xff0c;為大家講述了六個如何為企業產品添加功能的秘訣。 隨著云計算的發展&#…

Spring Boot下無法加載主類 org.apache.maven.wrapper.MavenWrapperMain問題解決

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 引言&#xff1a; 在SpringBoot中需要使用mvnw來做相關操作&#xff0c;但是卻有時候會報出達不到MavenWrapperMain的錯誤信息&#xff…

【前端面試】字節跳動2019校招面經 - 前端開發崗(二)

【前端面試】字節跳動2019校招面經 - 前端開發崗&#xff08;二&#xff09; 因為之前的一篇篇幅有限&#xff0c;太長了看著也不舒服&#xff0c;所以還是另起一篇吧?一、 jQuery和Vue的區別 jQuery 輕量級Javascript庫Vue 漸進式Javascript-MVVM框架jQuery和Vue的對比 jQuer…

SpringBoot與SpringCloud的版本說明及對應關系

轉載原文地址&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E