1. 程式人生 > >java本地快取和redis快取

java本地快取和redis快取

                                                                              本地快取

本地快取儲存在記憶體當中,實現快取如下

首先需要引入包

<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>2.10.1</version></dependency>
快取服務介面:
package com.mobcb.platform.service.common;

import 
net.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;

import 
com.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

MyBatis 本地快取二級快取使用以及原始碼分析 第二篇

                                         本篇分析

【修真院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-BootRedis快取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