數(shù)據(jù)緩存Cache以及緩存切換--SpringBoot

1.Spring緩存支持
Spring定義了org.springframework.cache.CacheManager和org.springframework.cache.Cache接口用來統(tǒng)一不同的緩存的技術(shù)猪半。其中餐胀,CacheManager是Spring提供的各種緩存技術(shù)抽象接口


使用方法:

@Bean
public EhCacheCacheManager cacheManager(CacheManager ehCacheCacheManager) {
    return new EhCacheCacheManager(ehCacheCacheManager);
}

2.聲名式緩存注解


@Cacheable贫母、@CachePut憋飞、@CacheEvit都有value屬性葛假,指定的是要使用的緩存名稱债热;key屬性指定的是
數(shù)據(jù)在緩存中的存儲的鍵形真。

3.開啟聲名式緩存支持
開啟聲名式緩存支持十分簡單,只需在配置類上使用@EnableCaching注解即可

@Configuration
@EnableCaching
public class AppConfig {
}

public interface UserInfoDao extends JpaRepository<UserInfo, Long> {
}
@Service
public class UserInfoServiceImpl implements UserInfoService {
    private static Logger log = Logger.getLogger(String.valueOf(UserInfoServiceImpl.class));
    @Autowired
    UserInfoDao userInfoDao;

    @Override
    @CachePut(value = "userinfoentityManagerFactorycache",key="#userInfo.id") //@CachePut緩存新增的或更新的數(shù)據(jù)到緩存贞奋,其中緩存名稱為people赌厅,數(shù)據(jù)的key是person的id。
    public UserInfo save(UserInfo userInfo) {
        UserInfo u = userInfoDao.save(userInfo);
        log.info("為userinfo的id(也是cache的key):" + u.getId() + "數(shù)據(jù)做了緩存");
        return u;
    }

    @Override
    @CacheEvict(value = "userinfocache") //@CacheEvict從緩存people中刪除key為id的數(shù)據(jù)忆矛。
    public void remove(Long id) {
        log.info("刪除了userinfo的id(也是cache的key):" + id + "數(shù)據(jù)緩存");
        userInfoDao.deleteById(id);
    }

   @Override
    @Cacheable(value = "userinfocache",key="#userInfo.id") //@Cacheable緩存key為person的id數(shù)據(jù)到緩存people中察蹲。
    public UserInfo findOne(UserInfo userInfo) {
        UserInfo u = userInfoDao.findOne();
        log.info("為userinfo的id(也是cache的key):" + u.getId() + "數(shù)據(jù)做了緩存");
        return u;
    }



啟動類也要加上

@SpringBootApplication
@EnableCaching
public class SpringbootcacheApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootcacheApplication.class, args);
    }
}

4.啟動、訪問催训,項目啟動后洽议,數(shù)據(jù)庫中會自動生成user_info的表(表明可以自定義)

1.添加一條數(shù)據(jù):


日志:

Hibernate: insert into user_info (address, age, name, sex) values (?, ?, ?, ?) 
 c.h.cache.userinfo.UserInfoServiceImpl : 為userinfo的id(也是cache的key):12數(shù)據(jù)做了緩存

2.再次訪問http://127.0.0.1:5000/userinfo/cache?id=12則控制臺沒有輸入。


3.測試remove
我們剛才已經(jīng)為id=12做了緩存漫拭,取id=12的值直接從緩存中讀取亚兄。

控制臺輸出:

 c.h.cache.userinfo.UserInfoServiceImpl : 刪除了userinfo的id(也是cache的key):12數(shù)據(jù)緩存 
Hibernate: select userinfo0_.id as id1_0_0_, userinfo0_.address as address2_0_0_, userinfo0_.age as age3_0_0_, userinfo0_.name as name4_0_0_, userinfo0_.sex as sex5_0_0_ from user_info userinfo0_ where userinfo0_.id=? 
Hibernate: delete from user_info where id=?

4.再次訪問http://127.0.0.1:5000/userinfo/cache?id=12(提前是有值的情況下),會發(fā)現(xiàn)控制臺重新給做了緩存采驻。

Hibernate: select userinfo0_.id as id1_0_0_, userinfo0_.address as address2_0_0_, userinfo0_.age as age3_0_0_, userinfo0_.name as name4_0_0_, userinfo0_.sex as sex5_0_0_ from user_info userinfo0_ where userinfo0_.id=? 
c.h.cache.userinfo.UserInfoServiceImpl : 為userinfo的id(也是cache的key):12數(shù)據(jù)做了緩存

切換緩存

  1. EchCache

當我們需要使用EhCache作為緩存技術(shù)的時候审胚,只需要在pom.xml中添加EchCache的依賴即可:

<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
</dependency>

EhCache所需的配置文件ehcache.xml只需放在類路徑下,Spring Boot會自動掃描礼旅。

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
    <cache name="UserInfo" maxElementsInMemory="1000" />
</ehcache>

Spring Boot會給我們自動配置EhCacheCacheManager的Bean膳叨。

2.Guava

當我們需要使用Guava作為緩存技術(shù)的時候,只需要在pom.xml中添加Guava的依賴即可:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>18.0</version>
</dependency>

Spring Boot會給我們自動配置GuavaCacheManager的Bean痘系。

3.Redis

使用Redis菲嘴,只需添加下面的依賴即可

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-redis</artifactId>
</dependency>

Spring Boot將會為我們自動配置RedisCacheManager以及RedisTemplate的Bean。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載汰翠,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者龄坪。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市复唤,隨后出現(xiàn)的幾起案子健田,更是在濱河造成了極大的恐慌,老刑警劉巖佛纫,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妓局,死亡現(xiàn)場離奇詭異,居然都是意外死亡呈宇,警方通過查閱死者的電腦和手機跟磨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來攒盈,“玉大人抵拘,你說我怎么就攤上這事⌒突恚” “怎么了僵蛛?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迎变。 經(jīng)常有香客問我充尉,道長,這世上最難降的妖魔是什么衣形? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任驼侠,我火速辦了婚禮姿鸿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘倒源。我一直安慰自己苛预,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布笋熬。 她就那樣靜靜地躺著热某,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胳螟。 梳的紋絲不亂的頭發(fā)上昔馋,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音糖耸,去河邊找鬼秘遏。 笑死,一個胖子當著我的面吹牛嘉竟,可吹牛的內(nèi)容都是我干的垄提。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼周拐,長吁一口氣:“原來是場噩夢啊……” “哼铡俐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妥粟,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤审丘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后勾给,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滩报,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年播急,在試婚紗的時候發(fā)現(xiàn)自己被綠了脓钾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡桩警,死狀恐怖可训,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捶枢,我是刑警寧澤握截,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站烂叔,受9級特大地震影響谨胞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒜鸡,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一胯努、第九天 我趴在偏房一處隱蔽的房頂上張望牢裳。 院中可真熱鬧,春花似錦叶沛、人聲如沸蒲讯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辜伟,卻和暖如春氓侧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背导狡。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工约巷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人旱捧。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓独郎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親枚赡。 傳聞我的和親對象是個殘疾皇子氓癌,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

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