springboot+mybatis集成自定義緩存ehcache用法筆記


? ? ? ?3a8a0e256b60abcde04e286b984dadd8.png ? ? ? ?

今天小編給大家整理了springboot+mybatis集成自定義緩存ehcache用法筆記,希望對大家能有所辦幫助!

一、ehcache介紹

EhCache 是一個純Java的進程內緩存管理框架,屬于開源的Java分布式緩存框架,主要用于通用緩存,Java EE和輕量級容器。

1、特點

1. 簡單、快速

3. 提供多種緩存策略

4. 緩存數據可分兩級:內存和磁盤

5. 緩存數據會在服務器重啟的過程中重新寫入磁盤

6. 可以通過RMI、可插入API等方式進行分布式緩存

7. 具有緩存和緩存管理器的偵聽接口

8. 支持多緩存管理器實例,以及一個實例的多個緩存區域

9. 提供了Hibernate的緩存實現

2、應用場景

  • 單應用或對緩存訪問性能要求很高的應用

  • 適合簡單共享

  • 適合緩存內容不大的場景,比如MyBatis自定義緩存、系統配置信息、頁面緩存。

二、springboot+mybatis集成ehcache步驟

Spring Boot 的緩存機制

高速緩存抽象不提供實際存儲,并且依賴于由org.springframework.cache.Cache和org.springframework.cache.CacheManager接口實現的抽象。 Spring Boot根據實現自動配置合適的CacheManager,只要緩存支持通過@EnableCaching注解啟用即可。

1、添加ehcache.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"><diskStore path="java.io.tmpdir" /><!-- 配置提供者 1、peerDiscovery,提供者方式,有兩種方式:自動發現(automatic)、手動配置(manual) 2、rmiUrls,手動方式時提供者的地址,多個的話用|隔開 --><cacheManagerPeerProviderFactoryclass="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"properties="peerDiscovery=manual,rmiUrls=//127.0.0.1:40002/userCache" /><!-- <cacheManagerPeerProviderFactoryclass="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446,timeToLive=255"/>--><!-- 配置監聽器 1、hostName 主機地址 2、port 端口 3、socketTimeoutMillis socket子模塊的超時時間,默認是2000ms --><cacheManagerPeerListenerFactoryclass="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"properties="hostName=127.0.0.1, port=40001, socketTimeoutMillis=2000" /><!-- <cacheManagerPeerListenerFactoryclass="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/> --><defaultCache eternal="false" maxElementsInMemory="1000"overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" /><cachename="userCache"maxElementsInMemory="1000"eternal="false"timeToIdleSeconds="300"timeToLiveSeconds="300"overflowToDisk="false"memoryStoreEvictionPolicy="LRU"><!-- 配置緩存事件監聽器 replicateAsynchronously 操作是否異步,默認值為true. replicatePuts 添加操作是否同步到集群內的其他緩存,默認為true.replicateUpdates 更新操作是否同步到集群內的其他緩存,默認為true. replicateUpdatesViaCopy 更新之后的對象是否復制到集群中的其他緩存(true);replicateRemovals 刪除操作是否同步到集群內的其他緩存,默認為true. --><cacheEventListenerFactoryclass="net.sf.ehcache.distribution.RMICacheReplicatorFactory"properties="replicateAsynchronously=true,replicatePuts=true,replicateUpdates=true,replicateUpdatesViaCopy=true,replicateRemovals=true " /><!-- 初始化緩存,以及自動設置 --><bootstrapCacheLoaderFactoryclass="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"properties="bootstrapAsynchronously=true" /></cache></ehcache>

2、配置 application.properyies

#cache 配置cache spring.cache.cache-names=userCache 
spring.cache.jcache.config=classpath:ehcache.xml

3、springboot啟動類增加注解@EnableCaching

@SpringBootApplication
@ComponentScan(basePackages="com.ehcache")//掃描組件
@EnableCaching
public class EhcacheTestApplication {public static void main(String[] args) {SpringApplication.run(EhcacheTestApplication.class, args);}
}

4、UserInfoService.java 文件增加緩存注解

@Service
public class UserInfoService {@Autowiredprivate UserDao userDao;@CacheEvict(key="'user_'+#uid", value="userCache")public void del(String uid) {       userDao.del(uid);}@CachePut(key="'user_'+#user.id", value="userCache")public void update(User user) {userDao.update(user);}@Cacheable(key="'user_'+#id",value="userCache")public User getUserById(String id){     return userDao.findById(id);    }@CacheEvict(key="'user'",value="userCache")public String save(User user) {        return userDao.save(user);}
}

5、增加測試控制器TestController.java

package com.ehcache.controller;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import com.ehcache.entity.User;
import com.ehcache.factory.CacheManagerFactory;
import com.ehcache.factory.UserFactory;
import com.ehcache.service.UserService;
import com.google.gson.Gson;import net.sf.ehcache.Element;@RestController
@RequestMapping("/CacheTest")
public class CacheTestController {@Autowiredprivate UserService userService;Gson gson = new Gson();CacheManagerFactory cmf = CacheManagerFactory.getInstance();@RequestMapping(value = "/test", method = RequestMethod.GET)public String test(HttpServletRequest request){// 新增新用戶String id = userService.save(UserFactory.createUser());User user = userService.getUserById(id);user.setUsername("小明");userService.update(user);// 查詢該用戶System.out.println(gson.toJson(user, User.class));      System.out.println();// 再查詢該用戶User user = userService.getUserById(uid);System.out.println(gson.toJson(user, User.class));System.out.println();// 更新該用戶userService.update(user);// 更新成功后再查詢該用戶        System.out.println(gson.toJson(userService.getUserById(id), User.class));System.out.println();// 刪除該用戶userService.del(id);System.out.println();// 刪除后再查詢該用戶        System.out.println(gson.toJson(userService.getUserById(id), User.class));return id;}
}

IT技術分享社區

個人博客網站:https://programmerblog.xyz

c9b483006cf291d0e83e3858703cee8e.png

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

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

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

相關文章

Java取絕對值

在Java中可以使用Math.abs()方法來方便的進行絕對值計算&#xff0c;例如&#xff1a; 輸入的是正數的時候直接返回即可&#xff0c;當是負數的時候返回它的相反數即可。 使用三目運算符可以使用一行代碼就能做到 int value Math.abs(-90);System.out.println(value);System…

PHP怎么做一個加法口訣,神奇的手指速算口訣,100以內的加減法一分鐘學會

手指速算是一套手、心、腦并用的科學計算方法&#xff0c;教孩子學會&#xff0c;既能開發大腦、增強動作協調能力和記憶力&#xff0c;還能增強學習興趣哦~學起來并不難哦&#xff0c;爸爸媽媽可以和孩子一起算一算&#xff0c;比比看誰更快&#xff01;手指速算秘訣準備&…

Android_Layout (一)

layout &#xff08;布局&#xff09; --->Android 有五大布局&#xff0c;分別是&#xff1a; LinearLayout : 線性布局&#xff0c;子組件按照垂直或者水平方向來布局。RelativeLayout &#xff1a;相對布局&#xff0c;按照控件之間的相互位置進行參照物的概念排布&…

前端:uniapp封裝網絡請求筆記

uniapp作為開發移動端的前端框架&#xff0c;目前國內是非常流行的&#xff0c;使用HbuilderX開發工具基于uniapp框架開發的系統可以方便的轉換為小程序、APP等移動端程序&#xff0c;大大降低了移動開發的成本。網絡請求更是每個前端項目必備的技術&#xff0c;所以有必要進行…

java中instanceof使用詳細介紹

instanceof是Java語言中的一個二元運算符&#xff0c;它的作用是&#xff1a;判斷一個引用類型變量所指向的對象是否是一個類(或接口、抽象類、父類)的實例&#xff0c;即它左邊的對象是否是它右邊的類的實例&#xff0c;該運算符返回boolean類型的數據。 boolean result obj…

javaWEB總結(9):自定義HttpServlet

前言:我們知道 MyHttpServlet是MyGenericServlet的子類&#xff0c;MyHttpServlet會繼承父類的方法&#xff0c;可是卻很少去追問MyHttpServlet中的doGet方法和doPost方法是如何進行判斷的&#xff0c;本文主要做一個小例子&#xff0c;進一步理解HttpServlet。有些代碼前文多次…

硬件知識:u-boot和bootloader的區別

目錄 1、Bootloader 2、uboot 2.1.硬件管理 2.2.能夠完成鏡像燒錄&#xff08;刷機&#xff09; 2.3.uboot的“生命周期” 2.4.uboot要提供命令式shell界面 3、bootloader 與 uboot的區別 嵌入式軟件工程師聽說過 u-boot 和 bootloader&#xff0c;但很多工程師依然不知道他們到…

Java中局部變量必須初始化

Java中有兩種變量&#xff0c;局部變量和成員變量。 成員變量可以不進行初始化&#xff0c;虛擬機也會確保它有一個默認的值。 局部變量不能這樣做&#xff0c;我們必須對它進行賦值&#xff0c;才能使用它。

php 直播服務器搭建,基于Nginx搭建RTMP/HLS視頻直播服務器

1、Nginx環境搭建(基于lnmp環境)//下載并安裝lnmp環境wget -c http://soft.vpser.net/lnmp/lnmp1.3.tar.gz && tar zxf lnmp1.3.tar.gz && cd lnmp1.3 && ./install.sh lnmp安裝完成安裝完成后訪問服務器地址會出現如下界面lnmpPS&#xff1a;安裝時生…

辦公:office辦公軟件Excel表格的打印技巧

很多新手使用辦公軟件過程中&#xff0c;對于Excel的打印出現了諸多問題&#xff0c;今天我們就一起來看看表格打印的幾個技巧&#xff01; 打印預覽時網格線怎么不見了&#xff1f; 如何調整打印區域的頁邊距&#xff1f; 如何設置單色打印&#xff1f; ...... 這些打印時遇到…

vuejs 中如何優雅的獲取 Input 值

http://www.sunzhongwei.com/how-to-get-input-value-in-vuejs轉載于:https://www.cnblogs.com/benpaodexiaopangzi/p/6093275.html

線程池和線程詳細教程

1. 線程池的概念&#xff1a; 線程池就是首先創建一些線程&#xff0c;它們的集合稱為線程池。使用線程池可以很好地提高性能&#xff0c;線程池在系統啟動時即創建大量空閑的線程&#xff0c;程序將一個任務傳給線程池&#xff0c;線程池就會啟動一條線程來執行這個任務&#…

虛擬主機 php .htacess,LiteSpeed添加虛擬主機+支持htaccess圖文教程

上次給大家簡單介紹了Debian下手動安裝LiteSpeedMySQLPHP的教程(點擊查看)&#xff0c;但是這個教程還沒完&#xff0c;想要使用litespeed還要進入后臺進行設置&#xff0c;包括添加虛擬主機和.htaccess偽靜態的支持&#xff0c;本文就繼續這個話題給大家詳細做個圖文教程吧~為…

前端:uniapp封裝組件用法筆記

大家在做前端項目開發的時候&#xff0c;經常會遇到公用的一些頁面&#xff0c;比如搜索、列表、商品詳情卡片、評論列表等。為了提高開發效率、使代碼看起來更加簡潔&#xff0c;這個時候封裝相應的組件是最好的解決方案。今天小編給大家介紹一下如何在uniapp中封裝組件&#…

Angular的工作原理

首先上一小段代碼&#xff08;index.html&#xff09;&#xff0c;結合代碼我們來看看&#xff0c;angular一步一步都做了些什么。 <!doctype html> <html ng-app><head><script src"angular.js"></script></head><body>&…

php中等腰金字塔挖空,php 用for循環做,金字塔,菱形,空三角

echo "金字塔 style1";for($i1;$i<9;$i){for($k0;$kecho "*";}echo "";}echo "金字塔 style2";for($c5;$c>0;$c--){for($c10;$c1echo "*";}echo "";}echo "金字塔 style3";for($a0;$a<11;$a){…

網絡知識:四個網絡命令ping、arp、tracert、route的用法介紹

網絡相關的從業人員&#xff0c;都需要面對檢測和解決網絡故障的各種問題&#xff0c;實際案例中因為網絡導致的故障也是最多的&#xff0c;今天我們和大家一起來學習一下解決網絡故障時使用最多的四個網絡命令。希望對大家以后的實際工作中的故障排除起到作用。 1、Ping命令的…

jQuery擲骰子

網上找的jQuery擲骰子效果&#xff0c;測試兼容IE7及以上瀏覽器&#xff0c;IE6沒有測試 js代碼如下&#xff1a; 1 $(function(){2 var dice $("#dice");3 dice.click(function(){4 $(".wrap").append("<div iddice_mask><…

電腦知識:臺式電腦如何使用無線網上網

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…