java本地快取和redis快取
本地快取
本地快取儲存在記憶體當中,實現快取如下
首先需要引入包
<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>2.10.1</version></dependency>
快取服務介面:
package com.mobcb.platform.service.common; importnet.sf.ehcache.Cache; public interface EhcacheService { public void clearCache(String cacheName, String cacheKey); public void putCache(String cacheName, String cacheKey, Object value); public Object getCacheValue(String cacheName, String cacheKey); public Cache getCache(String cacheName); /*** 設定快取 * * @param cacheName 快取名稱 * @param cacheKey 快取key * @param value 值 * @param timeToLiveSeconds 存在時間,單位秒 */ public void putCache(String cacheName, String cacheKey, Object value, int timeToLiveSeconds); }
EhcacheService 介面實現:
package com.mobcb.platform.service.impl.common; importcom.mobcb.platform.service.common.EhcacheService; import javax.annotation.Resource; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Service; @Service("ehcacheService") public class EhcacheServiceImpl implements EhcacheService { private static Log logger = LogFactory.getLog(EhcacheServiceImpl.class); @Resource(name = "ehCacheManager") private CacheManager cacheManger; private boolean createCacheIfNotFound = true; @Override public void clearCache(String cacheName, String cacheKey) { Cache cache = getCache(cacheName); if (cache == null) { return; } cache.remove(cacheKey); } @Override public void putCache(String cacheName, String cacheKey, Object value) { Cache cache = getCache(cacheName); if (cache == null) { return; } cache.put(new Element(cacheKey, value)); } @Override public Object getCacheValue(String cacheName, String cacheKey) { Cache cache = getCache(cacheName); if (cache == null) { return null; } Element element = cache.get(cacheKey); if (element == null || element.isExpired()) { return null; } return element.getObjectValue(); } @Override public Cache getCache(String cacheName) { Cache cache = cacheManger.getCache(cacheName); if (cache == null && createCacheIfNotFound) { cache = (Cache) cacheManger.addCacheIfAbsent(cacheName); } if (cache == null) { logger.error("EHCache: cache not config and not auto created, cacheName=" + cacheName); } return cache; } @Override public void putCache(String cacheName, String cacheKey, Object value, int timeToLiveSeconds) { Cache cache = getCache(cacheName); if (cache == null) { return; } cache.put(new Element(cacheKey, value, timeToLiveSeconds, timeToLiveSeconds)); } }
快取使用示例:
引入快取服務介面
/** * 快取服務 */ @Resource(name = "ehcacheService") private EhcacheService ehcacheService;
呼叫:
Object requestSource = ehcacheService.getCacheValue( "SHCAuth", "SHCAuthKey"); logger.info("------------------------快取獲取認證碼"+requestSource+"-----------------------");
第一個引數是快取名,第二個是快取名下的鍵值
Redis快取
快取介面:
package com.mobcb.platform.service.common; /** * 快取服務,提供快取操作方法 * <p> * </p> * Created by storm on 2016-05-26. */ public interface CacheService { /** * 清除快取 * * @param cacheName 快取名稱 * @param cacheKey 快取key */ void clearCache(String cacheName, String cacheKey); /** * 增加快取 * * @param cacheName 快取名稱 * @param cacheKey 快取key * @param value 值 */ void putCache(String cacheName, String cacheKey, Object value); /** * 獲取快取值 * * @param cacheName 快取名稱 * @param cacheKey 快取key * @return */ Object getCacheValue(String cacheName, String cacheKey); }
快取介面實現:
package com.mobcb.platform.service.impl.common; import com.mobcb.platform.service.common.CacheService; import javax.annotation.Resource; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.stereotype.Service; /** * Created by storm on 2016-05-26. */ @Service("cacheService") public class CacheServiceImpl implements CacheService { @Resource(name = "cacheManager") private CacheManager cacheManger; @Override public void clearCache(String cacheName, String cacheKey) { // 清除快取 Cache cache = getCache(cacheName); if(cache == null) { return; } cache.evict(cacheName + "-" + cacheKey); } @Override public void putCache(String cacheName, String cacheKey, Object value) { Cache cache = getCache(cacheName); if(cache == null) { return; } cache.put(cacheName + "-" + cacheKey, value); } @Override public Object getCacheValue(String cacheName, String cacheKey) { Cache cache = getCache(cacheName); if(cache == null) { return null; } Cache.ValueWrapper element = cache.get(cacheName + "-" + cacheKey); if(element == null) { return null; } return element.get(); } public Cache getCache(String cacheName) { Cache cache = cacheManger.getCache(cacheName); return cache; } }
cacheManger配置如下:
@Bean public CacheManager cacheManager( @SuppressWarnings("rawtypes") RedisTemplate redisTemplate) { RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); // cacheManager.setDefaultExpiration(86400); cacheManager.setDefaultExpiration(172800); return cacheManager; }
相關推薦
java本地快取和redis快取
本地快取本地快取儲存在記憶體當中,實現快取如下首先需要引入包<dependency><groupId&
SpringBoot學習筆記(10)-----SpringBoot中使用Redis/Mongodb和快取Ehcache快取和redis快取
1. 使用Redis 在使用redis之前,首先要保證安裝或有redis的伺服器,接下就是引入redis依賴。 pom.xml檔案如下 <dependency> <groupId>org.springframework.boot</
MyBatis 本地快取和二級快取使用以及原始碼分析 第一篇
本地快取 也稱為一級快取,分為兩個作用域SESSION和STATEMENT。官網中的描述:MyBatis利用本地快取機制(Local Cache)防止迴圈引用(迴圈引用)和加速重複巢狀查詢。預設值為SESSION,這種情況下會快取一個會話中執行的所有查詢。若設定值為ST
【修真院java小課堂】REDIS快取叢集介紹
大家好,我是IT修真院西安分院第三期學員,一枚正直純潔善良的JAVA程式設計師。 今天給大家分享一下,修真院官網JAVA任務六,深度思考中的知識點——REDIS快取叢集介紹 一、背景介紹 Redis: Redis 是一個開源(BSD許可)的,記憶體中的資料結構儲存系統
【修真院JAVA小課堂】redis快取叢集簡單介紹
大家好,我是IT修真院鄭州分院第11期的JAVA學員,一枚正直純潔善良的java程式設計師。 今天給大家分享一下,redis快取叢集簡單介紹。 1.背景介紹 redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括s
Nginx反向代理快取和redis簡介
Nginx中的ngx_http_proxy_module模組可以實現後端伺服器的反向代理功能,這樣就可以實現客戶端請求的動靜分離以及負載均衡功能。 當Nginx將客戶端請求反向代理至後端伺服器時,建立的是keep-alive連線;代理伺服器與客戶端,代理伺服器與後端web
DelayQueue延遲佇列和Redis快取實現訂單自動取消功能
首先這是一個操作頻繁的自動化定時功能,對比於定時器有著更大的使用空間和效能優化,無論是前端的setTimeout與setInterval 定時器還是後端的TimerTask定時器,在面對短期內的頻繁操作都會有著效能和多執行緒之間的問題,所以這時的佇列就起到很重要的作用了,尤其
java Hibernate一級快取和二級快取概念案例詳解
一、一級快取二級快取的概念解釋 (1)一級快取就是Session級別的快取,一個Session做了一個查詢操作,它會把這個操作的結果放在一級快取中,如果短時間內這個 session(一定要同一個session)又做了同一個操作,那麼hibernate直接從一級快
Java專案中使用Redis快取案例
快取的目的是為了提高系統的效能,快取中的資料主要有兩種: 1.熱點資料。我們將經常訪問到的資料放在快取中,降低資料庫I/O,同時因為快取的資料的高速查詢,加快整個系統的響應速度,也在一定程度上提高併發量。 2.查詢
Intellij IDEA 搭建Spring Boot專案(三)配置事務和Redis快取
Intellij IDEA 搭建Spring Boot專案 –>配置事務和Redis快取 標籤(空格分隔): SpringBoot JAVA後臺 一、開始配置事物 類似我們前一篇配置spring-dao的時候,我們可以看見在ssm中配置事物的
基於Spring-Boot和Redis快取Mysql資料庫資料
@Configuration @EnableCaching public class CacheConfig extends CachingConfigurerSupport { @Value("${spring.redis.host}") private String host;
使用shiro的會話管理和redis快取管理來構建登入模組spring+struts+hibernate(SSH)
shiro是一個很好用的安全框架,主要表現在使用者認證,許可權認證,會話管理,如果想優化還可以做Cache管理,我們不需要做太多工作在使用者身份token安全方面(記錄shiro及用redis開發的步驟及一些問題,因為網上很多資料都不給全程式碼讓小白沒法理解,這裡我
MyBatis一級快取和二級快取詳解
一級快取 Mybatis對快取提供支援,但是在沒有配置的預設情況下,它只開啟一級快取,一級快取只是相對於同一個SqlSession而言。所以在引數和SQL完全一樣的情況下,我們使用同一個SqlSession物件呼叫一個Mapper方法,往往只執行一次SQL,因為使用SelSession第一次
springmvc快取 和 mybatis快取
1. 匯入相關依賴包: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId>
Hibernate總結--一級快取和二級快取
在Hibernate中存在一級快取和二級快取,一級快取時Session 級別的快取,它是屬於事務範圍的快取,這一級別的快取由 hibernate 管理的。一級快取Hibernate預設會實現,當使用get或者load等方式查詢時會將結果存在Session中,在下一次查詢時。若是同一個Session,
Hibernate 二級快取和查詢快取
一級快取: 1,在session上面有一個一級快取;一級快取的生命週期和session相同,一級快取最大生命週期就是一個執行緒;在web環境下面,session的最大生命週期就是一次請求; 2,一級快取可以用來幹嘛? &nb
Hibernate的一級快取、二級快取和查詢快取
Hibernate的Session提供了一級快取的功能,預設總是有效的,當應用程式儲存持久化實體、修改持久化實體時,Session並不會立即把這種改變提交到資料庫,而是快取在當前的Session中,除非顯示呼叫了Session的flush()方法或通過close()方法關閉Sessi
在螢幕繪製一個旋轉的線框立方體(使用頂點快取和索引快取)
首先裡面還是有兩個基本的檔案:d3dUtility.h以及d3dUtility.cpp 裡面的主要內容就是實現Direct3D的初始化,以及模板函式的的實現,和訊息迴圈函式的宣告,回撥函式的宣告。 具體的解釋在部落格:在螢幕繪製一個三角形以及Direct3D初始化例程中有詳細的解釋,這裡
Director3D中的繪製——頂點快取和索引快取
一個頂點快取是儲存有頂點資料的連續空間,一個索引快取是儲存有索引資料的連續空間,使用頂點快取和索引快取來表示相關的資料,而不使用陣列來表示的原因是因為:頂點快取和索引快取儲存在視訊記憶體中,在處理的時候能夠獲得比系統記憶體更快的處理速度。 在程式碼中,頂點快取使用的介面IDirectorVe