Spring Boot 中 Redis 的使用

Spring Boot 對常用的數(shù)據(jù)庫支持外,對 Nosql 數(shù)據(jù)庫也進行了封裝自動化囤采。

Redis 介紹

Redis 是目前業(yè)界使用最廣泛的內(nèi)存數(shù)據(jù)存儲。相比 Memcached涩禀,Redis 支持更豐富的數(shù)據(jù)結(jié)構(gòu)才睹,例如 hashes, lists, sets 等,同時支持數(shù)據(jù)持久化淳梦。除此之外析砸,Redis 還提供一些類數(shù)據(jù)庫的特性,比如事務(wù)爆袍,HA首繁,主從庫≡赡遥可以說 Redis 兼具了緩存系統(tǒng)和數(shù)據(jù)庫的一些特性弦疮,因此有著豐富的應(yīng)用場景。本文介紹 Redis 在 Spring Boot 中兩個典型的應(yīng)用場景谆扎。

如何使用

1挂捅、引入依賴包


Spring Boot 提供了對 Redis 集成的組件包:spring-boot-starter-data-redis,spring-boot-starter-data-redis依賴于spring-data-redis?和?lettuce?堂湖。Spring Boot 1.0 默認使用的是 Jedis 客戶端闲先,2.0 替換成 Lettuce,但如果你從 Spring Boot 1.5.X 切換過來无蜂,幾乎感受不大差異伺糠,這是因為?spring-boot-starter-data-redis?為我們隔離了其中的差異性。

Lettuce 是一個可伸縮線程安全的 Redis 客戶端斥季,多個線程可以共享同一個 RedisConnection训桶,它利用優(yōu)秀 netty NIO 框架來高效地管理多個連接。

2酣倾、添加配置文件

# Redis數(shù)據(jù)庫索引(默認為0)

spring.redis.database=0?

# Redis服務(wù)器地址

spring.redis.host=localhost

# Redis服務(wù)器連接端口

spring.redis.port=6379?

# Redis服務(wù)器連接密碼(默認為空)

spring.redis.password=

# 連接池最大連接數(shù)(使用負值表示沒有限制) 默認 8

spring.redis.lettuce.pool.max-active=8

# 連接池最大阻塞等待時間(使用負值表示沒有限制) 默認 -1

spring.redis.lettuce.pool.max-wait=-1

# 連接池中的最大空閑連接 默認 8

spring.redis.lettuce.pool.max-idle=8

# 連接池中的最小空閑連接 默認 0

spring.redis.lettuce.pool.min-idle=0

3舵揭、添加 cache 的配置類


注意我們使用了注解:@EnableCaching來開啟緩存。

3躁锡、好了午绳,接下來就可以直接使用了

以上都是手動使用的方式,如何在查找數(shù)據(jù)庫的時候自動使用緩存呢映之,看下面拦焚;

4蜡坊、自動根據(jù)方法生成緩存


其中 value 的值就是緩存到 Redis 中的 key

共享 Session

分布式系統(tǒng)中,Session 共享有很多的解決方案赎败,其中托管到緩存中應(yīng)該是最常用的方案之一秕衙,

Spring Session 官方說明

Spring Session provides an API and implementations for managing a user’s session information.

Spring Session 提供了一套創(chuàng)建和管理 Servlet HttpSession 的方案。Spring Session 提供了集群 Session(Clustered Sessions)功能僵刮,默認采用外置的 Redis 來存儲 Session 數(shù)據(jù)据忘,以此來解決 Session 共享的問題。

如何使用

1妓笙、引入依賴

org.springframework.sessionspring-session-data-redis

2若河、Session 配置:

@Configuration@EnableRedisHttpSession(maxInactiveIntervalInSeconds =86400*30)publicclassSessionConfig{}

maxInactiveIntervalInSeconds: 設(shè)置 Session 失效時間,使用 Redis Session 之后寞宫,原 Spring Boot 的 server.session.timeout 屬性不再生效萧福。

好了,這樣就配置好了辈赋,我們來測試一下

3鲫忍、測試

添加測試方法獲取 sessionid

@RequestMapping("/uid")

String uid(HttpSession session)

{? ? UUID uid = (UUID) session.getAttribute("uid");

? ? ? ?if(uid ==null)?

? ? ? ?{ uid = UUID.randomUUID();? ? }? ??

? ? ? ? ?session.setAttribute("uid", uid);

? ? ? ? ? returnsession.getId();}

登錄 Redis 輸入?keys '*sessions*'

t<spring:session:sessions:db031986-8ecc-48d6-b471-b137a3ed6bc4

t(spring:session:expirations:1472976480000

其中 1472976480000 為失效時間,意思是這個時間后 Session 失效钥屈,db031986-8ecc-48d6-b471-b137a3ed6bc4?為 sessionId,登錄?http://localhost:8080/uid?發(fā)現(xiàn)會一致悟民,就說明 Session 已經(jīng)在 Redis 里面進行有效的管理了。

如何在兩臺或者多臺中共享 Session

其實就是按照上面的步驟在另一個項目中再次配置一次篷就,啟動后自動就進行了 Session 共享射亏。

示例代碼-github

示例代碼-碼云

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市竭业,隨后出現(xiàn)的幾起案子智润,更是在濱河造成了極大的恐慌,老刑警劉巖未辆,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窟绷,死亡現(xiàn)場離奇詭異,居然都是意外死亡咐柜,警方通過查閱死者的電腦和手機兼蜈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拙友,“玉大人为狸,你說我怎么就攤上這事∫牌酰” “怎么了钥平?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我涉瘾,道長,這世上最難降的妖魔是什么捷兰? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任立叛,我火速辦了婚禮,結(jié)果婚禮上贡茅,老公的妹妹穿的比我還像新娘秘蛇。我一直安慰自己,他們只是感情好顶考,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布赁还。 她就那樣靜靜地躺著,像睡著了一般驹沿。 火紅的嫁衣襯著肌膚如雪艘策。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天渊季,我揣著相機與錄音朋蔫,去河邊找鬼。 笑死却汉,一個胖子當著我的面吹牛驯妄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播合砂,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼青扔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了翩伪?” 一聲冷哼從身側(cè)響起微猖,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎幻工,沒想到半個月后励两,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡囊颅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年当悔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踢代。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡盲憎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胳挎,到底是詐尸還是另有隱情饼疙,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布慕爬,位于F島的核電站窑眯,受9級特大地震影響屏积,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜磅甩,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一炊林、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卷要,春花似錦渣聚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瓶堕,卻和暖如春隘道,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捞烟。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工薄声, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人题画。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓默辨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苍息。 傳聞我的和親對象是個殘疾皇子缩幸,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349