SpringBoot Redis

SpringCache

https://www.cnblogs.com/niechen/p/8760139.html

  • Cache:該接口定義了操作緩存的最基本行為
package org.springframework.cache;  
public interface Cache {  
    String getName();  //緩存的名字  
    Object getNativeCache(); //得到底層使用的緩存囊卜,如Ehcache  
    ValueWrapper get(Object key); //根據(jù)key得到一個(gè)ValueWrapper,然后調(diào)用其get方法獲取值  
    <T> T get(Object key, Class<T> type);//根據(jù)key泄伪,和value的類型直接獲取value  
    void put(Object key, Object value);//往緩存放數(shù)據(jù)  
    void evict(Object key);//從緩存中移除key對(duì)應(yīng)的緩存  
    void clear(); //清空緩存  
    interface ValueWrapper { //緩存值的Wrapper  
        Object get(); //得到真實(shí)的value  
    }  
}
  • CacheManager:該接口主要作用是獲取緩存和獲取緩存名稱(因?yàn)槲覀冊(cè)趹?yīng)用中并不是使用一個(gè)Cache粥脚,而是多個(gè),因此Spring提供了CacheManager抽象,用于緩存的管理)
/**
  *默認(rèn)提供的實(shí)現(xiàn): 
  *ConcurrentMapCacheManager/ConcurrentMapCacheFactoryBean:管理ConcurrentMapCache矢沿;
  *GuavaCacheManager;
  *EhCacheCacheManager/EhCacheManagerFactoryBean酸纲;
  *JCacheCacheManager/JCacheManagerFactoryBean捣鲸;
  *另外還提供了CompositeCacheManager用于組合CacheManager,即可以從多個(gè)CacheManager中輪詢得到相應(yīng)的Cache
  *
  *當(dāng)我們調(diào)用cacheManager.getCache(cacheName) 時(shí)闽坡,會(huì)先從第一個(gè)cacheManager中查找有沒(méi)有cacheName的cache栽惶,如果沒(méi)有接著查找第二個(gè),如果最后找不到疾嗅,因?yàn)閒allbackToNoOpCache=true外厂,那么將返回一個(gè)NOP的Cache否則返回null。
  *除了GuavaCacheManager之外代承,其他Cache都支持Spring事務(wù)的汁蝶,即如果事務(wù)回滾了,Cache的數(shù)據(jù)也會(huì)移除掉论悴。 
  *Spring不進(jìn)行Cache的緩存策略的維護(hù)掖棉,這些都是由底層Cache自己實(shí)現(xiàn)墓律,Spring只是提供了一個(gè)Wrapper,提供一套對(duì)外一致的API幔亥。 
  */
package org.springframework.cache;  
import java.util.Collection;  
public interface CacheManager {  
    Cache getCache(String name); //根據(jù)Cache名字獲取Cache   
    Collection<String> getCacheNames(); //得到所有Cache的名字  
}
  • @EnableCaching:用于開啟緩存注解耻讽,通常需要和@Configuration使用
  • @CacheEvict 觸發(fā)Cache接口中的evict方法,相當(dāng)于移除key對(duì)應(yīng)的值

SpringBoot-2.0之前

http://www.reibang.com/p/5a70b13a4fa7
要啟用緩存支持紫谷,我們需要?jiǎng)?chuàng)建一個(gè)新的 CacheManager bean齐饮。CacheManager 接口有很多實(shí)現(xiàn)捐寥,本文演示的是和 Redis 的集成笤昨,自然就是用 RedisCacheManager 了。Redis 不是應(yīng)用的共享內(nèi)存握恳,它只是一個(gè)內(nèi)存服務(wù)器瞒窒,就像 MySql 似的,我們需要將應(yīng)用連接到它并使用某種“語(yǔ)言”進(jìn)行交互乡洼,因此我們還需要一個(gè)連接工廠以及一個(gè) Spring 和 Redis 對(duì)話要用的 RedisTemplate崇裁,這些都是 Redis 緩存所必需的配置,把它們都放在自定義的 CachingConfigurerSupport 中:

import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
 
@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {
 
    @Bean
    public JedisConnectionFactory redisConnectionFactory() {
        JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
 
        // Defaults
        redisConnectionFactory.setHostName("192.168.1.166");
        redisConnectionFactory.setPort(6379);
        return redisConnectionFactory;
    }
 
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
        redisTemplate.setConnectionFactory(cf);
        return redisTemplate;
    }
 
    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
 
        // Number of seconds before expiration. Defaults to unlimited (0)
        cacheManager.setDefaultExpiration(3000); // Sets the default expire time (in seconds)
        return cacheManager;
    }
    
}

我們使用@EnableCaching注解來(lái)開啟我們的項(xiàng)目支持緩存束昵,并在配置類內(nèi)添加了方法cacheManager()拔稳,方法的返回值則是使用了我們的Redis緩存的管理器,SpringBoot項(xiàng)目啟動(dòng)時(shí)就會(huì)去找自定義配置的CacheManager對(duì)象并且自動(dòng)應(yīng)用到項(xiàng)目中锹雏。

SpringBoot-2.0

http://www.reibang.com/p/4ccd4512700f

添加redis依賴并在application.properties中添加redis配置后巴比,Spring Boot會(huì)在偵測(cè)到存在Redis的依賴并且Redis的配置是可用的情況下,使用RedisCacheManager初始化CacheManager礁遵。也就是說(shuō)要使用緩存的話轻绞,SpringBoot就會(huì)選擇Redis來(lái)作為緩存的容器。Spring會(huì)執(zhí)行RedisAutoConfiguration佣耐,初始化RedisTemplate和StringRedisTemplate政勃。然后RedisCacheConfiguration會(huì)將RedisAutoConfiguration生成的RedisTemplate注入方法生成RedisCacheManager 并進(jìn)行了相關(guān)配置。(我們還可以對(duì)這個(gè)RedisCacheManager進(jìn)行二次配置兼砖,這里只列出配置key的有效期

     /**
     * 重新配置RedisCacheManager
     * @param rd
     */
    @Autowired
    public void configRedisCacheManger(RedisCacheManager rd){
        rd.setDefaultExpiration(100L);
    }

注意:

請(qǐng)不要在applicaion.properties中配置: spring.cache.cache-names=book1,book2奸远,否則會(huì)導(dǎo)致我們新的配置無(wú)法作用到這些配置的cache上。這是因?yàn)镽edisCacheConfiguration 初始化RedisCacheManager后讽挟,會(huì)立即調(diào)用RedisCacheConfiguration 的初始化cache然走,而此時(shí)configRedisCacheManger還沒(méi)有執(zhí)行此方法,使得我們的配置無(wú)法啟作用戏挡。反之芍瑞,如果不配置,則后創(chuàng)建cache褐墅,會(huì)使用我們的配置拆檬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洪己,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子竟贯,更是在濱河造成了極大的恐慌答捕,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屑那,死亡現(xiàn)場(chǎng)離奇詭異拱镐,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)持际,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門沃琅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蜘欲,你說(shuō)我怎么就攤上這事益眉。” “怎么了姥份?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵郭脂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我澈歉,道長(zhǎng)展鸡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任埃难,我火速辦了婚禮莹弊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凯砍。我一直安慰自己箱硕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布悟衩。 她就那樣靜靜地躺著剧罩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪座泳。 梳的紋絲不亂的頭發(fā)上惠昔,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音挑势,去河邊找鬼镇防。 笑死,一個(gè)胖子當(dāng)著我的面吹牛潮饱,可吹牛的內(nèi)容都是我干的来氧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼啦扬!你這毒婦竟也來(lái)了中狂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扑毡,失蹤者是張志新(化名)和其女友劉穎胃榕,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞄摊,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勋又,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了换帜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楔壤。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖膜赃,靈堂內(nèi)的尸體忽然破棺而出挺邀,到底是詐尸還是另有隱情揉忘,我是刑警寧澤跳座,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站泣矛,受9級(jí)特大地震影響疲眷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜您朽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一狂丝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哗总,春花似錦几颜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至涮母,卻和暖如春谆趾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叛本。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工沪蓬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人来候。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓跷叉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子云挟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理峡眶,服務(wù)發(fā)現(xiàn),斷路器植锉,智...
    卡卡羅2017閱讀 134,695評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,844評(píng)論 6 342
  • 1. 前言 上一篇文章整合了springboot+spring mvc+mybatis辫樱,基于三層架構(gòu)搭建了一個(gè)接口...
    你想要怎樣的未來(lái)閱讀 76,124評(píng)論 9 89
  • 關(guān)于redis的安裝、配置及啟動(dòng)俊庇,參考Redis簡(jiǎn)單配置使用 1.添加依賴 2.添加配置文件 3.添加配置類 Re...
    憂郁的小碼仔閱讀 1,145評(píng)論 2 7
  • 我十分感恩我的死黨狮暑,你們讓我成長(zhǎng),謝謝你辉饱。 我十分感恩我的孩子搬男,你讓我歡樂(lè),謝謝你彭沼。 我十分感恩我的同事缔逛,你們讓我...
    莫水娥閱讀 154評(píng)論 0 2