開(kāi)源軟件之Redis緩存_第1頁(yè)
開(kāi)源軟件之Redis緩存_第2頁(yè)
開(kāi)源軟件之Redis緩存_第3頁(yè)
開(kāi)源軟件之Redis緩存_第4頁(yè)
開(kāi)源軟件之Redis緩存_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Redis緩存項(xiàng)目案例-淘寶產(chǎn)品分類Redis緩存基本概念首先redis是一種key-value的存儲(chǔ)系統(tǒng),它的特點(diǎn)是提供了5種存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu),包括list,set,sortset,string,hash;這使得它能比關(guān)系型數(shù)據(jù)庫(kù)更好地描述數(shù)據(jù)的結(jié)構(gòu)。然后redis是一種基于內(nèi)存的緩存系統(tǒng),同時(shí)也有持久化機(jī)制。Redis緩存是一個(gè)開(kāi)源的使用ANSIC語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。Redis緩存基本概念許多語(yǔ)言都實(shí)現(xiàn)了連接redis的客戶端,僅僅redis網(wǎng)站(http://www.redis.io/clients)上列出的語(yǔ)言就有: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

主啟動(dòng)類添加@EnableCaching注解

spring+redis

配置文件中添加redis配置spring:

redis:

host:31

#數(shù)據(jù)庫(kù)索引

database:0

port:6379

#password:

#連接超時(shí)時(shí)間(ms)

timeout:5000

#自定義redis默認(rèn)過(guò)期時(shí)間(單位:時(shí))

expire-time:24

jedis:

pool:

#連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制)

max-active:-1

#連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制)

max-wait:-1

spring+redisSpringBoot緩存注解1、緩存@Cacheable:根據(jù)方法對(duì)其返回結(jié)果進(jìn)行緩存,下次請(qǐng)求時(shí),如果緩存存在,則直接讀取緩存數(shù)據(jù)返回;如果緩存不存在,則執(zhí)行方法,并把返回的結(jié)果存入緩存中,一般用在查詢方法上

屬性/方法名解釋value緩存名,必填,它指定了你的緩存存放在哪塊命名空間中cacheNames與value差不多,二選一即可key可選屬性,可以使用sqel標(biāo)簽自定義緩存的keyspring+redisSpringBoot緩存注解2、緩存@CachePut:使用該注解標(biāo)志的方法,每次都會(huì)執(zhí)行,并將結(jié)果存入指定的緩存中,其他方法可以直接從響應(yīng)的緩存中讀取緩存數(shù)據(jù),而不需要再去查詢數(shù)據(jù)庫(kù),一般用在新增的方法上

屬性/方法名解釋value緩存名,必填,它指定了你的緩存存放在哪塊命名空間中cacheNames與value差不多,二選一即可key可選屬性,可以使用sqel標(biāo)簽自定義緩存的keyspring+redisSpringBoot緩存注解3、緩存@CacheEvict:使用該注解標(biāo)志的方法,會(huì)清空指定的緩存,一般用在更新或者刪除方法上

屬性/方法名解釋value緩存名,必填,它指定了你的緩存存放在哪塊命名空間中cacheNames與value差不多,二選一即可key可選屬性,可以使用sqel標(biāo)簽自定義緩存的keyallEntries是否清空所有緩存,默認(rèn)為False,如果指定為true,則方法調(diào)用后將立即清空所有的緩存beforeInvocation是否在方法執(zhí)行前就清空,默認(rèn)為flase,如果指定為T(mén)rue,則會(huì)方法執(zhí)行前就會(huì)清空緩存spring+redisService中添加緩存注解@Service

publicclassCityService{

@Resource

privateCityDAOdao;

@Cacheable("city")

publicCityfindById(intid){

returndao.findById(id);

}

@Cacheable("citylist")

publicList<City>findAll(){

returndao.findAll();

}

}業(yè)界緩存產(chǎn)品對(duì)比RedisVSMemcached都是內(nèi)存高速緩存數(shù)據(jù)庫(kù)但R比M支持更多數(shù)據(jù)結(jié)構(gòu)且R可持久化業(yè)界緩存產(chǎn)品對(duì)比支持訂閱發(fā)布功能(subscribe/publish)運(yùn)行在內(nèi)存,速度快,官方號(hào)稱支持并發(fā)11萬(wàn)讀操作,并發(fā)8萬(wàn)寫(xiě)操作,很彪悍。數(shù)據(jù)雖在內(nèi)存,同時(shí)也支持持久化。提供兩種方式將數(shù)據(jù)保存到數(shù)據(jù)文件.rdb中,安全性高,但對(duì)效率有影響。如果不是對(duì)數(shù)據(jù)完整性要求極高,不推薦使用這種方式(默認(rèn)是)。保存對(duì)數(shù)據(jù)有影響的操作命令到.aof中,保存操作命令的頻率可配置,比較靈活,效率高,推薦使用。支持的數(shù)據(jù)結(jié)構(gòu)豐富(string、list、set、sortedset、hash)Redis集群主從復(fù)制原理從服務(wù)器連接主服務(wù)器,發(fā)送SYNC命令;主服務(wù)器接收到SYNC命名后,開(kāi)始執(zhí)行BGSAVE命令生成RDB文件并使用緩沖區(qū)記錄此后執(zhí)行的所有寫(xiě)命令;主服務(wù)器BGSAVE執(zhí)行完后,向所有從服務(wù)器發(fā)送快照文件,并在發(fā)送期間繼續(xù)記錄被執(zhí)行的寫(xiě)命令;從服務(wù)器收到快照文件后丟棄所有舊數(shù)據(jù),載入收到的快照;主服務(wù)器快照發(fā)送完畢后開(kāi)始向從服務(wù)器發(fā)送緩沖區(qū)中的寫(xiě)命令;從服務(wù)器完成對(duì)快照的載入,開(kāi)始接收命令請(qǐng)求,并執(zhí)行來(lái)自主服務(wù)器緩沖區(qū)的寫(xiě)命令;(從服務(wù)器初始化完成)主服務(wù)器每執(zhí)行一個(gè)寫(xiě)命令就會(huì)向從服務(wù)器發(fā)送相同的寫(xiě)命令,從服務(wù)器接收并執(zhí)行收到的寫(xiě)命令(從服務(wù)器初始化完成后的操作)主從復(fù)制Redis集群優(yōu)點(diǎn)支持主從復(fù)制,主機(jī)會(huì)自動(dòng)將數(shù)據(jù)同步到從機(jī),可以進(jìn)行讀寫(xiě)分離Slave同樣可以接受其它Slaves的連接和同步請(qǐng)求,這樣可以有效的分載Master的同步壓力。MasterServer是以非阻塞的方式為Slaves提供服務(wù)。所以在Master-Slave同步期間,客戶端仍然可以提交查詢或修改請(qǐng)求。SlaveServer同樣是以非阻塞的方式完成數(shù)據(jù)同步。在同步期間,如果有客戶端提交查詢請(qǐng)求,Redis則返回同步之前的數(shù)據(jù)主從復(fù)制Redis集群缺點(diǎn)Redis不具備自動(dòng)容錯(cuò)和恢復(fù)功能,主機(jī)從機(jī)的宕機(jī)都會(huì)導(dǎo)致前端部分讀寫(xiě)請(qǐng)求失敗,需要等待機(jī)器重啟或者手動(dòng)切換前端的IP才能恢復(fù)。主機(jī)宕機(jī),宕機(jī)前有部分?jǐn)?shù)據(jù)未能及時(shí)同步到從機(jī),切換IP后還會(huì)引入數(shù)據(jù)不一致的問(wèn)題,降低了系統(tǒng)的可用性。Redis較難支持在線擴(kuò)容,在集群容量達(dá)到上限時(shí)在線擴(kuò)容會(huì)變得很復(fù)雜。主從復(fù)制Redis集群原理哨兵模式Redis集群原理當(dāng)主服務(wù)器中斷服務(wù)后,可以將一個(gè)從服務(wù)器升級(jí)為主服務(wù)器,以便繼續(xù)提供服務(wù),但是這個(gè)過(guò)程需要人工手動(dòng)來(lái)操作。為此,Redis2.8中提供了哨兵工具來(lái)實(shí)現(xiàn)自動(dòng)化的系統(tǒng)監(jiān)控和故障恢復(fù)功能。哨兵的作用就是監(jiān)控Redis系統(tǒng)的運(yùn)行狀況。它的功能包括以下兩個(gè)。

(1)監(jiān)控主服務(wù)器和從服務(wù)器是否正常運(yùn)行。

(2)主服務(wù)器出現(xiàn)故障時(shí)自動(dòng)將從服務(wù)器轉(zhuǎn)換為主服務(wù)器。哨兵模式Redis集群工作方式每個(gè)Sentinel(哨兵)進(jìn)程以每秒鐘一次的頻率向整個(gè)集群中的Master主服務(wù)器,Slave從服務(wù)器以及其他Sentinel(哨兵)進(jìn)程發(fā)送一個(gè)PING命令。如果一個(gè)實(shí)例(instance)距離最后一次有效回復(fù)PING命令的時(shí)間超過(guò)down-after-milliseconds選項(xiàng)所指定的值,則這個(gè)實(shí)例會(huì)被Sentinel(哨兵)進(jìn)程標(biāo)記為主觀下線(SDOWN)如果一個(gè)Master主服務(wù)器被標(biāo)記為主觀下線(SDOWN),則正在監(jiān)視這個(gè)Master主服務(wù)器的所有Sentinel(哨兵)進(jìn)程要以每秒一次的頻率確認(rèn)Master主服務(wù)器的確進(jìn)入了主觀下線狀態(tài)當(dāng)有足夠數(shù)量的Sentinel(哨兵)進(jìn)程(大于等于配置文件指定的值)在指定的時(shí)間范圍內(nèi)確認(rèn)Master主服務(wù)器進(jìn)入了主觀下線狀態(tài)(SDOWN),則Master主服務(wù)器會(huì)被標(biāo)記為客觀下線(ODOWN)哨兵模式Redis集群工作方式在一般情況下,每個(gè)Sentinel(哨兵)進(jìn)程會(huì)以每10秒一次的頻率向集群中的所有Master主服務(wù)器、Slave從服務(wù)器發(fā)送INFO命令。當(dāng)Master主服務(wù)器被Sentinel(哨兵)進(jìn)程標(biāo)記為客觀下線(ODOWN)時(shí),Sentinel(哨兵)進(jìn)程向下線的Master主服務(wù)器的所有Slave從服務(wù)器發(fā)送INFO命令的頻率會(huì)從10秒一次改為每秒一次。若沒(méi)有足夠數(shù)量的Sentinel(哨兵)進(jìn)程同意Master主服務(wù)器下線,Master主服務(wù)器的客觀下線狀態(tài)就會(huì)被移除。若Master主服務(wù)器重新向Sentinel(哨兵)進(jìn)程發(fā)送PING命令返回有效回復(fù),Master主服務(wù)器的主觀下線狀態(tài)就會(huì)被移除。哨兵模式Redis集群優(yōu)點(diǎn)哨兵模式是基于主從模式的,所有主從的優(yōu)點(diǎn),哨兵模式都具有。主從可以自動(dòng)切換,系統(tǒng)更健壯,可用性更高。缺點(diǎn)Redis較難支持在線擴(kuò)容,在集群容量達(dá)到上限時(shí)在線擴(kuò)容會(huì)變得很復(fù)雜。哨兵模式Redis集群redis的哨兵模式基本已經(jīng)可以實(shí)現(xiàn)高可用,讀寫(xiě)分離,但是在這種模式下每臺(tái)redis服務(wù)器都存儲(chǔ)相同的數(shù)據(jù),很浪費(fèi)內(nèi)存,所以在redis3.0上加入了cluster模式,實(shí)現(xiàn)的redis的分布式存儲(chǔ),也就是說(shuō)每臺(tái)redis節(jié)點(diǎn)上存儲(chǔ)不同的內(nèi)容。集群模式Redis集群Redis-Cluster采用無(wú)中心結(jié)構(gòu)的特點(diǎn)所有的redis節(jié)點(diǎn)彼此互聯(lián)(PING-PONG機(jī)制),內(nèi)部使用二進(jìn)制協(xié)議優(yōu)化傳輸速度和帶寬。節(jié)點(diǎn)的fail是通過(guò)集群中超過(guò)半數(shù)的節(jié)點(diǎn)檢測(cè)失效時(shí)才生效。客戶端與redis節(jié)點(diǎn)直連,不需要中間代理層.客戶端不需要連接集群所有節(jié)點(diǎn),連接集群中任何一個(gè)可用節(jié)點(diǎn)即可。集群模式Redis集群工作方式在redis的每一個(gè)節(jié)點(diǎn)上,都有這么兩個(gè)東西,一個(gè)是插槽(slot),它的的取值范圍是:0-16383。還有一個(gè)就是cluster,可以理解為是一個(gè)集群管理的插件。當(dāng)我們的存取的key到達(dá)的時(shí)候,redis會(huì)根據(jù)crc16的算法得出一個(gè)結(jié)果,然后把結(jié)果對(duì)16384求余數(shù),這樣每個(gè)key都會(huì)對(duì)應(yīng)一個(gè)編號(hào)在0-16383之間的哈希槽,通過(guò)這個(gè)值,去找到對(duì)應(yīng)的插槽所對(duì)應(yīng)的節(jié)點(diǎn),然后直接自動(dòng)跳轉(zhuǎn)到這個(gè)對(duì)應(yīng)的節(jié)點(diǎn)上進(jìn)行存取操作。為了保證高可用,Redis集群引入了主從模式,一個(gè)主節(jié)點(diǎn)對(duì)應(yīng)一個(gè)或者多個(gè)從節(jié)點(diǎn),當(dāng)主節(jié)點(diǎn)宕機(jī)的時(shí)候,就會(huì)啟用從節(jié)點(diǎn)。當(dāng)其它主節(jié)點(diǎn)ping一個(gè)主節(jié)點(diǎn)A時(shí),如果半數(shù)以上的主節(jié)點(diǎn)與A通信超時(shí),那么認(rèn)為主節(jié)點(diǎn)A宕機(jī)了。如果主節(jié)點(diǎn)A和它的從節(jié)點(diǎn)A1都宕機(jī)了,那么該集群就無(wú)法再提供服務(wù)了。集群模式Redis集群優(yōu)點(diǎn)無(wú)中心架構(gòu);數(shù)據(jù)按照slot存儲(chǔ)分布在多個(gè)節(jié)點(diǎn),節(jié)點(diǎn)間數(shù)據(jù)共享,可動(dòng)態(tài)調(diào)整數(shù)據(jù)分布;可擴(kuò)展性:可線性擴(kuò)展到1000多個(gè)節(jié)點(diǎn),節(jié)點(diǎn)可動(dòng)態(tài)添加或刪除;高可用性:部分節(jié)點(diǎn)不可用時(shí),集群仍可用。通過(guò)增加Slave做standby數(shù)據(jù)副本,能夠?qū)崿F(xiàn)故障自動(dòng)failover,節(jié)點(diǎn)之間通過(guò)gossip協(xié)議交換狀態(tài)信息,用投票機(jī)制完成Slave到Master的角色提升;降低運(yùn)維成本,提高系統(tǒng)的擴(kuò)展性和可用性。集群模式Redis集群缺點(diǎn)Client實(shí)現(xiàn)復(fù)雜,驅(qū)動(dòng)要求實(shí)現(xiàn)SmartClient,緩存slotsmapping信息并及時(shí)更新,提高了開(kāi)發(fā)難度,客戶端的不成熟影響業(yè)務(wù)的穩(wěn)定性。目前僅JedisCluster相對(duì)成熟,異常處理部分還不完善,比如常見(jiàn)的“maxredirectexception”。節(jié)點(diǎn)會(huì)因?yàn)槟承┰虬l(fā)生阻塞(阻塞時(shí)間大于clutser-node-timeout),被判斷下線,這種failover是沒(méi)有必要的。數(shù)據(jù)通過(guò)異步復(fù)制,不保證數(shù)據(jù)的強(qiáng)一致性。多個(gè)業(yè)務(wù)使用同一套集群時(shí),無(wú)法根據(jù)統(tǒng)計(jì)區(qū)分冷熱數(shù)據(jù),資源隔離性較差,容易出現(xiàn)相互影響的情況。Slave在集群中充當(dāng)“冷備”,不能緩解讀壓力,當(dāng)然可以通過(guò)SDK的合理設(shè)計(jì)來(lái)提高Slave資源的利用率。集群模式Redis集群缺點(diǎn)Key批

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論