版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Redis緩存項目案例-淘寶產(chǎn)品分類Redis緩存基本概念首先redis是一種key-value的存儲系統(tǒng),它的特點是提供了5種存儲數(shù)據(jù)的結(jié)構(gòu),包括list,set,sortset,string,hash;這使得它能比關(guān)系型數(shù)據(jù)庫更好地描述數(shù)據(jù)的結(jié)構(gòu)。然后redis是一種基于內(nèi)存的緩存系統(tǒng),同時也有持久化機制。Redis緩存是一個開源的使用ANSIC語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。Redis緩存基本概念許多語言都實現(xiàn)了連接redis的客戶端,僅僅redis網(wǎng)站(http://www.redis.io/clients)上列出的語言就有:Perl?PHP?Objective-C?C#?C/C++Javaredis支持的數(shù)據(jù)結(jié)構(gòu)豐富,包括:String(字符串)、List(列表)、Set(集合)、SortedSet(有序集合)、Hash(哈希表)Redis安裝配置參考:CentOS7下安裝Redis.docxRedis客戶端spring+redisspring+redisspring+redis
主啟動類添加@EnableCaching注解
spring+redis
配置文件中添加redis配置spring:
redis:
host:31
#數(shù)據(jù)庫索引
database:0
port:6379
#password:
#連接超時時間(ms)
timeout:5000
#自定義redis默認過期時間(單位:時)
expire-time:24
jedis:
pool:
#連接池最大連接數(shù)(使用負值表示沒有限制)
max-active:-1
#連接池最大阻塞等待時間(使用負值表示沒有限制)
max-wait:-1
spring+redisSpringBoot緩存注解1、緩存@Cacheable:根據(jù)方法對其返回結(jié)果進行緩存,下次請求時,如果緩存存在,則直接讀取緩存數(shù)據(jù)返回;如果緩存不存在,則執(zhí)行方法,并把返回的結(jié)果存入緩存中,一般用在查詢方法上
屬性/方法名解釋value緩存名,必填,它指定了你的緩存存放在哪塊命名空間中cacheNames與value差不多,二選一即可key可選屬性,可以使用sqel標簽自定義緩存的keyspring+redisSpringBoot緩存注解2、緩存@CachePut:使用該注解標志的方法,每次都會執(zhí)行,并將結(jié)果存入指定的緩存中,其他方法可以直接從響應(yīng)的緩存中讀取緩存數(shù)據(jù),而不需要再去查詢數(shù)據(jù)庫,一般用在新增的方法上
屬性/方法名解釋value緩存名,必填,它指定了你的緩存存放在哪塊命名空間中cacheNames與value差不多,二選一即可key可選屬性,可以使用sqel標簽自定義緩存的keyspring+redisSpringBoot緩存注解3、緩存@CacheEvict:使用該注解標志的方法,會清空指定的緩存,一般用在更新或者刪除方法上
屬性/方法名解釋value緩存名,必填,它指定了你的緩存存放在哪塊命名空間中cacheNames與value差不多,二選一即可key可選屬性,可以使用sqel標簽自定義緩存的keyallEntries是否清空所有緩存,默認為False,如果指定為true,則方法調(diào)用后將立即清空所有的緩存beforeInvocation是否在方法執(zhí)行前就清空,默認為flase,如果指定為True,則會方法執(zhí)行前就會清空緩存spring+redisService中添加緩存注解@Service
publicclassCityService{
@Resource
privateCityDAOdao;
@Cacheable("city")
publicCityfindById(intid){
returndao.findById(id);
}
@Cacheable("citylist")
publicList<City>findAll(){
returndao.findAll();
}
}業(yè)界緩存產(chǎn)品對比RedisVSMemcached都是內(nèi)存高速緩存數(shù)據(jù)庫但R比M支持更多數(shù)據(jù)結(jié)構(gòu)且R可持久化業(yè)界緩存產(chǎn)品對比支持訂閱發(fā)布功能(subscribe/publish)運行在內(nèi)存,速度快,官方號稱支持并發(fā)11萬讀操作,并發(fā)8萬寫操作,很彪悍。數(shù)據(jù)雖在內(nèi)存,同時也支持持久化。提供兩種方式將數(shù)據(jù)保存到數(shù)據(jù)文件.rdb中,安全性高,但對效率有影響。如果不是對數(shù)據(jù)完整性要求極高,不推薦使用這種方式(默認是)。保存對數(shù)據(jù)有影響的操作命令到.aof中,保存操作命令的頻率可配置,比較靈活,效率高,推薦使用。支持的數(shù)據(jù)結(jié)構(gòu)豐富(string、list、set、sortedset、hash)Redis集群主從復(fù)制原理從服務(wù)器連接主服務(wù)器,發(fā)送SYNC命令;主服務(wù)器接收到SYNC命名后,開始執(zhí)行BGSAVE命令生成RDB文件并使用緩沖區(qū)記錄此后執(zhí)行的所有寫命令;主服務(wù)器BGSAVE執(zhí)行完后,向所有從服務(wù)器發(fā)送快照文件,并在發(fā)送期間繼續(xù)記錄被執(zhí)行的寫命令;從服務(wù)器收到快照文件后丟棄所有舊數(shù)據(jù),載入收到的快照;主服務(wù)器快照發(fā)送完畢后開始向從服務(wù)器發(fā)送緩沖區(qū)中的寫命令;從服務(wù)器完成對快照的載入,開始接收命令請求,并執(zhí)行來自主服務(wù)器緩沖區(qū)的寫命令;(從服務(wù)器初始化完成)主服務(wù)器每執(zhí)行一個寫命令就會向從服務(wù)器發(fā)送相同的寫命令,從服務(wù)器接收并執(zhí)行收到的寫命令(從服務(wù)器初始化完成后的操作)主從復(fù)制Redis集群優(yōu)點支持主從復(fù)制,主機會自動將數(shù)據(jù)同步到從機,可以進行讀寫分離Slave同樣可以接受其它Slaves的連接和同步請求,這樣可以有效的分載Master的同步壓力。MasterServer是以非阻塞的方式為Slaves提供服務(wù)。所以在Master-Slave同步期間,客戶端仍然可以提交查詢或修改請求。SlaveServer同樣是以非阻塞的方式完成數(shù)據(jù)同步。在同步期間,如果有客戶端提交查詢請求,Redis則返回同步之前的數(shù)據(jù)主從復(fù)制Redis集群缺點Redis不具備自動容錯和恢復(fù)功能,主機從機的宕機都會導(dǎo)致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的IP才能恢復(fù)。主機宕機,宕機前有部分數(shù)據(jù)未能及時同步到從機,切換IP后還會引入數(shù)據(jù)不一致的問題,降低了系統(tǒng)的可用性。Redis較難支持在線擴容,在集群容量達到上限時在線擴容會變得很復(fù)雜。主從復(fù)制Redis集群原理哨兵模式Redis集群原理當(dāng)主服務(wù)器中斷服務(wù)后,可以將一個從服務(wù)器升級為主服務(wù)器,以便繼續(xù)提供服務(wù),但是這個過程需要人工手動來操作。為此,Redis2.8中提供了哨兵工具來實現(xiàn)自動化的系統(tǒng)監(jiān)控和故障恢復(fù)功能。哨兵的作用就是監(jiān)控Redis系統(tǒng)的運行狀況。它的功能包括以下兩個。
(1)監(jiān)控主服務(wù)器和從服務(wù)器是否正常運行。
(2)主服務(wù)器出現(xiàn)故障時自動將從服務(wù)器轉(zhuǎn)換為主服務(wù)器。哨兵模式Redis集群工作方式每個Sentinel(哨兵)進程以每秒鐘一次的頻率向整個集群中的Master主服務(wù)器,Slave從服務(wù)器以及其他Sentinel(哨兵)進程發(fā)送一個PING命令。如果一個實例(instance)距離最后一次有效回復(fù)PING命令的時間超過down-after-milliseconds選項所指定的值,則這個實例會被Sentinel(哨兵)進程標記為主觀下線(SDOWN)如果一個Master主服務(wù)器被標記為主觀下線(SDOWN),則正在監(jiān)視這個Master主服務(wù)器的所有Sentinel(哨兵)進程要以每秒一次的頻率確認Master主服務(wù)器的確進入了主觀下線狀態(tài)當(dāng)有足夠數(shù)量的Sentinel(哨兵)進程(大于等于配置文件指定的值)在指定的時間范圍內(nèi)確認Master主服務(wù)器進入了主觀下線狀態(tài)(SDOWN),則Master主服務(wù)器會被標記為客觀下線(ODOWN)哨兵模式Redis集群工作方式在一般情況下,每個Sentinel(哨兵)進程會以每10秒一次的頻率向集群中的所有Master主服務(wù)器、Slave從服務(wù)器發(fā)送INFO命令。當(dāng)Master主服務(wù)器被Sentinel(哨兵)進程標記為客觀下線(ODOWN)時,Sentinel(哨兵)進程向下線的Master主服務(wù)器的所有Slave從服務(wù)器發(fā)送INFO命令的頻率會從10秒一次改為每秒一次。若沒有足夠數(shù)量的Sentinel(哨兵)進程同意Master主服務(wù)器下線,Master主服務(wù)器的客觀下線狀態(tài)就會被移除。若Master主服務(wù)器重新向Sentinel(哨兵)進程發(fā)送PING命令返回有效回復(fù),Master主服務(wù)器的主觀下線狀態(tài)就會被移除。哨兵模式Redis集群優(yōu)點哨兵模式是基于主從模式的,所有主從的優(yōu)點,哨兵模式都具有。主從可以自動切換,系統(tǒng)更健壯,可用性更高。缺點Redis較難支持在線擴容,在集群容量達到上限時在線擴容會變得很復(fù)雜。哨兵模式Redis集群redis的哨兵模式基本已經(jīng)可以實現(xiàn)高可用,讀寫分離,但是在這種模式下每臺redis服務(wù)器都存儲相同的數(shù)據(jù),很浪費內(nèi)存,所以在redis3.0上加入了cluster模式,實現(xiàn)的redis的分布式存儲,也就是說每臺redis節(jié)點上存儲不同的內(nèi)容。集群模式Redis集群Redis-Cluster采用無中心結(jié)構(gòu)的特點所有的redis節(jié)點彼此互聯(lián)(PING-PONG機制),內(nèi)部使用二進制協(xié)議優(yōu)化傳輸速度和帶寬。節(jié)點的fail是通過集群中超過半數(shù)的節(jié)點檢測失效時才生效。客戶端與redis節(jié)點直連,不需要中間代理層.客戶端不需要連接集群所有節(jié)點,連接集群中任何一個可用節(jié)點即可。集群模式Redis集群工作方式在redis的每一個節(jié)點上,都有這么兩個東西,一個是插槽(slot),它的的取值范圍是:0-16383。還有一個就是cluster,可以理解為是一個集群管理的插件。當(dāng)我們的存取的key到達的時候,redis會根據(jù)crc16的算法得出一個結(jié)果,然后把結(jié)果對16384求余數(shù),這樣每個key都會對應(yīng)一個編號在0-16383之間的哈希槽,通過這個值,去找到對應(yīng)的插槽所對應(yīng)的節(jié)點,然后直接自動跳轉(zhuǎn)到這個對應(yīng)的節(jié)點上進行存取操作。為了保證高可用,Redis集群引入了主從模式,一個主節(jié)點對應(yīng)一個或者多個從節(jié)點,當(dāng)主節(jié)點宕機的時候,就會啟用從節(jié)點。當(dāng)其它主節(jié)點ping一個主節(jié)點A時,如果半數(shù)以上的主節(jié)點與A通信超時,那么認為主節(jié)點A宕機了。如果主節(jié)點A和它的從節(jié)點A1都宕機了,那么該集群就無法再提供服務(wù)了。集群模式Redis集群優(yōu)點無中心架構(gòu);數(shù)據(jù)按照slot存儲分布在多個節(jié)點,節(jié)點間數(shù)據(jù)共享,可動態(tài)調(diào)整數(shù)據(jù)分布;可擴展性:可線性擴展到1000多個節(jié)點,節(jié)點可動態(tài)添加或刪除;高可用性:部分節(jié)點不可用時,集群仍可用。通過增加Slave做standby數(shù)據(jù)副本,能夠?qū)崿F(xiàn)故障自動failover,節(jié)點之間通過gossip協(xié)議交換狀態(tài)信息,用投票機制完成Slave到Master的角色提升;降低運維成本,提高系統(tǒng)的擴展性和可用性。集群模式Redis集群缺點Client實現(xiàn)復(fù)雜,驅(qū)動要求實現(xiàn)SmartClient,緩存slotsmapping信息并及時更新,提高了開發(fā)難度,客戶端的不成熟影響業(yè)務(wù)的穩(wěn)定性。目前僅JedisCluster相對成熟,異常處理部分還不完善,比如常見的“maxredirectexception”。節(jié)點會因為某些原因發(fā)生阻塞(阻塞時間大于clutser-node-timeout),被判斷下線,這種failover是沒有必要的。數(shù)據(jù)通過異步復(fù)制,不保證數(shù)據(jù)的強一致性。多個業(yè)務(wù)使用同一套集群時,無法根據(jù)統(tǒng)計區(qū)分冷熱數(shù)據(jù),資源隔離性較差,容易出現(xiàn)相互影響的情況。Slave在集群中充當(dāng)“冷備”,不能緩解讀壓力,當(dāng)然可以通過SDK的合理設(shè)計來提高Slave資源的利用率。集群模式Redis集群缺點Key批
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 玉環(huán)市國有企業(yè)招聘筆試真題2024
- 重慶永川區(qū)事業(yè)單位定向招聘考試真題2024
- 2025年白朗輔警招聘真題及答案
- “夢工場”招商銀行大連分行2026寒假實習(xí)生招聘備考核心題庫及答案解析
- 2026年石獅市第六實驗小學(xué)招聘編外合同教師筆試重點試題及答案解析
- 2025云南昆明市五華區(qū)人民法院招聘第五批合同制司法輔助人員7人考試核心題庫及答案解析
- 2025廣西北海市社會保險經(jīng)辦中心招募就業(yè)見習(xí)生考試核心題庫及答案解析
- 2025 九年級語文下冊詩歌煉字煉句賞析課件
- 2025廣西百色工業(yè)投資發(fā)展集團有限公司招聘廣西百金資源開發(fā)有限公司工作人員備考核心試題附答案解析
- 2025年博思睿招聘(派遣至海寧市硤石街道辦事處)備考題庫參考答案詳解
- 2026年廣西中煙工業(yè)有限責(zé)任公司招聘(51名)參考筆試題庫及答案解析
- 2025余干縣發(fā)展控股集團有限公司招聘2人參考模擬試題及答案解析
- 藥品投訴應(yīng)急預(yù)案(3篇)
- 部編人教版一年級上冊語文生字組詞造句
- 鄭州工商學(xué)院《園林史》2025-2026學(xué)年第一學(xué)期期末試卷
- 物業(yè)反恐防暴培訓(xùn)
- 【完整版】2026國考《行測》真題(行政執(zhí)法)
- 2025年床上四件套市場調(diào)研:純棉印花需求與圖案美觀度分析
- 2025年度物流行業(yè)市場調(diào)研:產(chǎn)業(yè)規(guī)模、政策支持及數(shù)字化趨勢報告
- 2025年及未來5年市場數(shù)據(jù)中國拖拉機制造市場競爭態(tài)勢及投資戰(zhàn)略規(guī)劃研究報告
- 廣東省廣州市越秀區(qū)2024-2025學(xué)年八年級上學(xué)期期末考試英語試題
評論
0/150
提交評論