Redis--高級(jí)架構(gòu)PPT_第1頁
Redis--高級(jí)架構(gòu)PPT_第2頁
Redis--高級(jí)架構(gòu)PPT_第3頁
Redis--高級(jí)架構(gòu)PPT_第4頁
Redis--高級(jí)架構(gòu)PPT_第5頁
已閱讀5頁,還剩57頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Redis數(shù)據(jù)庫,1,學(xué)習(xí)目標(biāo):,1:redis特點(diǎn)及安裝2:redis鍵值操作3:redis數(shù)據(jù)類型string,link,set,orderset,hash4:事務(wù)5:消息訂閱6:持久化7:集群8:PHP-redis客戶端9:運(yùn)維10:仿微博實(shí)戰(zhàn),2,1.1redis特點(diǎn)介紹,REmoteDIctionaryServer(Redis)是一個(gè)由SalvatoreSanfilippo寫的key-value存儲(chǔ)系統(tǒng)。Redis提供了一些豐富的數(shù)據(jù)結(jié)構(gòu),包括lists,sets,orderedsets以及hashes,還有和Memcached一樣的strings結(jié)構(gòu).Redis當(dāng)然還包括了對這些數(shù)據(jù)結(jié)構(gòu)的豐富操作。1:數(shù)據(jù)結(jié)構(gòu)豐富2:持久化3:支持簡單事務(wù)4:主從配置方便,3,1.2redis安裝,不必configure1:make2:makePREFIX=/usr/local/redisinstall3:開啟服務(wù)./redis-server/path/to/redis.conf,4,1.3redis連接,redis的協(xié)議是基礎(chǔ)文本的協(xié)議,(http,memcached也是)客戶端的開發(fā)較為簡便redis官方提供了C,java,C#,PHP,lua腳本的客戶端我們在學(xué)習(xí)時(shí),用到redis-cli官方客戶端及php-redis客戶端在與redis-server同一目錄下,redis-cli即是#/path/to/redis-cli回車,5,DELkeykey.刪除多個(gè)key返回真正被刪除的key數(shù)量renamekeynewkey重命名key-newkey如果newkey存在,值被覆蓋renamenxkeynewkey同rename,只是newkey存在時(shí),不進(jìn)行操作movekeydb移動(dòng)key到另一個(gè)db,如果另一db有相同key,不做操作,2.1redis鍵操作命令,6,keyspattern支持*,?,匹配randomkey隨機(jī)返回key,但不刪除existskey判斷key是否存在,返回1/0typekey判斷key的類型返回string,set,zset,link,hashexpirekey用秒設(shè)置生命周期pexpirekey用毫秒設(shè)置生命周期persistkey使key變?yōu)橛谰胻tlkey查詢key的剩余生命周期(返回秒)pttlkey查詢key的剩余生命周期(返回毫秒)對于不存在的key或過期key,返回-1redis2.8對于不存在的key返回-2,2.2redis鍵操作命令,7,3.1字符串類型及期命令,SETSETNXSETEXPSETEXSETRANGEMSETMSETNXAPPENDGETMGETGETRANGEGETSETSTRLENDECRDECRBYINCRINCRBYINCRBYFLOATSETBITGETBITBITOPBITCOUNT,8,3.2.1字符串-set命令,1:SETkeyvalueex過期秒數(shù)px過期毫秒數(shù)nxxxEXsecond:設(shè)置鍵的過期時(shí)間為second秒。SETkeyvalueEXsecond效果等同于SETEXkeysecondvalue。PXmillisecond:設(shè)置鍵的過期時(shí)間為millisecond毫秒。SETkeyvaluePXmillisecond效果等同于PSETEXkeymillisecondvalue。NX:只在鍵不存在時(shí),才對鍵進(jìn)行設(shè)置操作。SETkeyvalueNX效果等同于SETNXkeyvalue。XX:只在鍵已經(jīng)存在時(shí),才對鍵進(jìn)行設(shè)置操作,9,3.2.2字符串-setrange命令,SETRANGEkeyoffsetvalue用value參數(shù)覆寫(overwrite)給定key所儲(chǔ)存的字符串值,從偏移量offset開始。不存在的key當(dāng)作空白字符串處理。如果offset過大,則原字符和偏移量之間的空白將用零字節(jié)(zerobytes,x00)來填充。最大偏移量是229-1(536870911),因?yàn)镽edis字符串的大小被限制在512兆(megabytes)以內(nèi)。,10,3.2.3字符串mset命令,msetk1v1k2v21:一次性設(shè)置多對鍵值2:原子性3:覆蓋舊值4:不想覆蓋舊值用msetnxmsetnxk1v1k2v2特點(diǎn):不覆蓋舊值,11,3.2.4字符串命令-append,APPENDkeyvalue如果key已經(jīng)存在并且是一個(gè)字符串,APPEND命令將value追加到key原來的值的末尾。如果key不存在,APPEND就簡單地將給定key設(shè)為value,就像執(zhí)行SETkeyvalue一樣。返回值:追加value之后,key中字符串的長度。,12,3.2.5字符串操作之get,GETkey返回key所關(guān)聯(lián)的字符串值。如果key不存在那么返回特殊值nil。假如key儲(chǔ)存的值不是字符串類型,返回一個(gè)錯(cuò)誤,因?yàn)镚ET只能用于處理字符串值。可用版本:=1.0.0時(shí)間復(fù)雜度:O(1)返回值:當(dāng)key不存在時(shí),返回nil,否則,返回key的值。如果key不是字符串類型,那么返回一個(gè)錯(cuò)誤。,13,3.2.6字符串之mget,MGETkeykey.返回所有(一個(gè)或多個(gè))給定key的值。如果給定的某個(gè)key不存在,返回特殊值nil,14,3.2.7,GETRANGEkeystartend返回字符串的一部分,和PHP中substr一樣(redis2.0以前該命令就叫substr)左-右0,1,2.計(jì)數(shù)右-左-1,-2,-3.計(jì)數(shù),15,3.2.8getset,GETSETkeynewvalue設(shè)置新值,并返回舊值redisGETSETdbmongodb#沒有舊值,返回nil(nil)redisGETdbmongodbredisGETSETdbredis#返回舊值mongodbmongodbredisGETdbredis,16,STRLENkey返回key所儲(chǔ)存的字符串值的長度。key不存在是返回0key存在但不是字符串類型時(shí),返回一個(gè)錯(cuò)誤。,3.2.9字符串操作之getset,17,3.2.10字符串操作之getbit,GETBITkeyoffset對key所儲(chǔ)存的字符串值,獲取指定偏移量上的位(bit)。當(dāng)offset比字符串值的長度大,或者key不存在時(shí),返回0(不能判斷確實(shí)為0,還是offset不對)注意:位從左邊,從0記數(shù),18,3.2.11字符串操作之setbit,SETBITkeyoffsetvalue設(shè)置或清除指定偏移量上的位(bit)為0/11:當(dāng)key不存在時(shí),自動(dòng)生成一個(gè)新的字符串值。2:字符串會(huì)進(jìn)行伸展(grown)以確保它可以將value保存在指定的偏移量上。當(dāng)字符串值進(jìn)行伸展時(shí),空白位置以0填充。3:offset參數(shù)必須大于或等于0,小于232。4:返回值為該bit之前的值用此功能把a(bǔ)-A,19,3.2.12字符串操作之bitop,BITOPoperationdestkeykey1key2.對key1,key2.keyN作operation,并將結(jié)果保存到destkey上。operation可以是AND、OR、NOT、XOR注:NOT操作時(shí),key只能有1個(gè),20,3.3.1link鏈表-lpush,LPUSHkeyvaluevalue.將一個(gè)或多個(gè)值value插入到列表key的表頭(l指left)如果有多個(gè)value值,那么各個(gè)value值按從左到右的順序依次插入到表頭:如說,對空列表mylist執(zhí)行命令LPUSHmylistabc,列表的值將是cba,返回值:操作后的元素?cái)?shù)量注:1:key不存在,自動(dòng)創(chuàng)建空列表并執(zhí)行LPUSH操作。2:key存在但不是列表類型時(shí),返回一個(gè)錯(cuò)誤。3:rpushkeyvalue是把值插入到鏈表尾部,不再單述4:lpushx在key不存在時(shí),不自動(dòng)創(chuàng)建鏈接,不再單述,21,3.3.2鏈表之lpop,LPOPkey移除并返回列表key的頭元素。返回值:列表的頭元素。當(dāng)key不存在時(shí),返回nil注:rpopkey移除并返回列表key的尾元素,不單述,22,3.3.3鏈表之blpop,BLPOPkeykey.timeoutBLPOP是列表的阻塞式(blocking)彈出原語。它是LPOP命令的阻塞版本,當(dāng)給定列表內(nèi)沒有任何元素可供彈出的時(shí)候,連接將被BLPOP命令阻塞,直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。當(dāng)給定多個(gè)key參數(shù)時(shí),按參數(shù)key的先后順序依次檢查各個(gè)列表,彈出第一個(gè)非空列表的頭元素并結(jié)束命令。注:1:timeout為0則不超時(shí)2:此功能有什么用?brpop:阻塞彈出隊(duì)列尾部的元素,不再單述,23,3.3.4鏈表之llen,LLENkey返回列表key的長度。注:key不存在,返回0key不是列表類型,返回錯(cuò)誤,24,3.3.5鏈表之lrange,LRANGEkeystartstop返回列表指定區(qū)間內(nèi)的元素,區(qū)間以偏移量start和stop指定。左數(shù)從0開始,右數(shù)-1開始注:1:start大于length,或start位于stop右邊,則LRANGE返回一個(gè)空列表2:如果stop下標(biāo)比end下標(biāo)還要大,Redis將stop的值設(shè)置為end,25,3.3.5鏈表之lrem,LREMkeycountvalue根據(jù)參數(shù)count的值,移除列表中與參數(shù)value相等的元素。count的值可以是以下幾種:count0:從表頭開始向表尾搜索,移除與value相等的元素,數(shù)量為count。count0:從表頭開始向表尾搜索,移除與value相等的元素,數(shù)量為count。countstop的元素ZSCOREkeymember返回成員member的score值。如果member元素不是有序集key的成員,或key不存在,返回nil。zrevrangekeystartstopwithscores倒序排列后,返回start-stop的元素,40,ZRANGEBYSCOREkeyminmaxWITHSCORESLIMIToffsetcount按分?jǐn)?shù)(升續(xù))排序,取min,max之間的值,并偏移offset取count個(gè)zrevrangebyscore不解釋ZRANKkeymember返回member的排名,升序比較,從第0名開始zrevrankkeymember不解釋ZREMRANGEBYRANKkeystartstop按排名刪除start-stop名的元素zremrangebyscorekeystart,stop按分?jǐn)?shù)刪除start,stop之間的元素ZINTERSTOREdestinationnumkeyskeykey.WEIGHTSweightweight.AGGREGATESUM|MIN|MAX求交集ZUNIONSTOREdestinationnumkeyskeykey.WEIGHTSweightweight.AGGREGATESUM|MIN|MAX求并集,3.5.2有序集合,41,HSETkeyfieldvalue將哈希表key中的域field的值設(shè)為valuekey不存在,則創(chuàng)建field已存在,則覆蓋。HSETNXkeyfieldvalue設(shè)置key中的域field的值設(shè)置為value,field不存在時(shí)才有效HMSETkeyfield1value1field2value2.設(shè)置多個(gè)域field/valueHGETkeyfield返回key中給定域field的值HMGETkeyfieldfield.返回多個(gè)field的值,3.6.1哈希(hash)操作,42,HGETALLkey返回哈希表所有的域和值。HDELkeyfieldfield.刪除指定域,返回成功刪除的元素個(gè)數(shù)HLENkey返回hash表中的元素個(gè)數(shù)HEXISTSkeyfield判斷指定域是否存在HINCRBYkeyfieldincrementfield的值加上增量increment。HINCRBYFLOATkeyfieldincrement不解釋hkeys返回哈希表中所有鍵hvalues返回哈希表中所有值,3.6.2哈希(hash)操作,43,watchkey1key2unwtachkey1key2multicommandcommand.discard/exec注意:如果命令格式有誤,exec會(huì)報(bào)錯(cuò)如果命令格式不錯(cuò),只是邏輯錯(cuò),exec不執(zhí)行正確的命令-需要程序員去負(fù)責(zé),4.1事務(wù)操作,44,5.1發(fā)布與訂閱,subscribe-頻道-publishsubscribenews-訂閱新聞?lì)l道publishnews內(nèi)容-發(fā)布新聞內(nèi)容適宜做在線聊天,消息推送,45,5.2發(fā)布與訂閱,SUBSCRIBEchannelchannel.訂閱給定的一個(gè)或多個(gè)頻道的信息。UNSUBSCRIBEchannelchannel.指示客戶端退訂給定的頻道。如果沒有頻道被指定,也即是,一個(gè)無參數(shù)的UNSUBSCRIBE調(diào)用被執(zhí)行,那么客戶端使用SUBSCRIBE命令訂閱的所有頻道都會(huì)被退訂PUNSUBSCRIBEpatternpattern.指示客戶端退訂所有給定模式。,46,持久化:即把數(shù)據(jù)存儲(chǔ)于斷電后不會(huì)丟失的設(shè)備中,通常是硬盤.常見的持久化方式:主從:通過從服務(wù)器保存和持久化,如mongoDB的replicationsets配置日志:操作生成相關(guān)日志,并通過日志來恢復(fù)數(shù)據(jù)couchDB對于數(shù)據(jù)內(nèi)容,不修改,只追加,則文件本身就是日志,不會(huì)丟失數(shù)據(jù).,6.1持久化的方式,47,6.2redis-之rdb快照持久化,rdb的工作原理:每隔N分鐘或N次寫操作后,從內(nèi)存dump數(shù)據(jù)形成rdb文件,壓縮放在備份目錄注:紅色部分可通過參數(shù)來配置,48,save9001#刷新快照到硬盤中,必須滿足兩者要求才會(huì)觸發(fā),即900秒之后至少1個(gè)關(guān)鍵字發(fā)生變化。save30010#必須是300秒之后至少10個(gè)關(guān)鍵字發(fā)生變化。save6010000#必須是60秒之后至少10000個(gè)關(guān)鍵字發(fā)生變化。stop-writes-on-bgsave-erroryes#后臺(tái)存儲(chǔ)錯(cuò)誤停止寫。rdbcompressionyes#使用LZF壓縮rdb文件。rdbchecksumyes#存儲(chǔ)和加載rdb文件時(shí)校驗(yàn)。dbfilenamedump.rdb#設(shè)置rdb文件名。dir./#設(shè)置工作目錄,rdb文件會(huì)寫入該目錄。,6.3rdb快照相關(guān)參數(shù),49,6.4rdb的缺陷,斷電,在2個(gè)保存點(diǎn)之間,斷電,將會(huì)丟失1-N分鐘的數(shù)據(jù)出于對持久化的更精細(xì)要求,redis增添了aof方式appendonlyfile,50,6.5aof的原理,redis主進(jìn)程,后臺(tái)日志進(jìn)程,aof文件,setappend.寫操作,1:每個(gè)命令重寫一次aof?2:某key操作100次,產(chǎn)生100行記錄,aof文件會(huì)很大,怎么解決?,51,appendonlyno#是否僅要日志appendfsyncno#系統(tǒng)緩沖,統(tǒng)一寫,速度快appendfsyncalways#系統(tǒng)不緩沖,直接寫,慢,丟失數(shù)據(jù)少appendfsynceverysec#折衷,每秒寫1次no-appendfsync-on-rewriteno#重寫aof時(shí)同步最新數(shù)據(jù)auto-AOF-rewrite-percentage100當(dāng)前aof文件是上次重寫是大N%時(shí)重寫auto-AOF-rewrite-min-size64mbaof重寫至少要達(dá)到的大小,6.6aof日志持久化,52,7.1集群的作用,1:主從備份防止主機(jī)宕機(jī)2:讀寫分離,分擔(dān)master的任務(wù)3:任務(wù)分離,如從服分別分擔(dān)備份工作與計(jì)算工作,53,7.2redis集群,master,slave1,slave2,master,slave1,slave2,第2種方式的好處:master宕機(jī)后,可以直接切換到slave1,54,7.3主從通信過程,master,slave,sync自動(dòng),dump出rdb,緩沖的aof,replicationFeedSlaves,55,7.4redis集群配置,Master配置:1:關(guān)閉rdb快照(備份工作交給slave)2:可以開啟aofslave配置:1:聲明slave-of2:配置密碼如果master有密碼3:某1個(gè)slave打開rdb快照功能4:配置是否只讀slave-read-only,56,7.5redis主從復(fù)制的缺陷,缺陷:每次salave斷開后,(無論是主動(dòng)斷開,還是網(wǎng)絡(luò)故障)再連接master都要master全部dump出來rdb,再aof,即同步的過程都要重新執(zhí)行1遍.所以要記住-多臺(tái)slave不要一下都啟動(dòng)起來,否則master可能IO劇增,57,8.1PHP-redis客戶端,58,9.1運(yùn)維常用的server端命令,TIME查看時(shí)間戳與微秒數(shù)DBSIZE查看當(dāng)前庫中的key數(shù)量BGREWRITEAOF后臺(tái)進(jìn)程重寫AOFBGSAVE后臺(tái)保存rdb快照SAVE保存rdb快照LASTSAVE上次保存時(shí)間SLAVEOF設(shè)為slave服務(wù)器FLUSHALL清空所有dbFLUSHDB清空當(dāng)前dbSHUTDOWN|save|nosave斷開連接,關(guān)閉服務(wù)器SLOWLOG顯示慢查詢INFO顯示服務(wù)器信息CONFIGGET獲取配置信息CONFIGSET設(shè)置配置信息MONITOR打開控制臺(tái)SYNC主從同步CLIENTLIST客戶端列表CLIENTKILL關(guān)閉某個(gè)客戶端CLIENTSETNAME為客戶端設(shè)置名字CLIENTGETNAME獲取客戶端名字,59,9.2運(yùn)維時(shí)的觀察參數(shù),1:內(nèi)存#Memoryused_memory:859192數(shù)據(jù)結(jié)構(gòu)的空間used_memory_rss:7634944實(shí)占空間mem_fragmentation_ratio:8.89前2者的比例,1.N為佳2:主

溫馨提示

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

評(píng)論

0/150

提交評(píng)論