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

下載本文檔

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

文檔簡介

1、Redis數(shù)據(jù)庫,.,2,學(xué)習(xí)目標(biāo):,1:redis特點(diǎn)及安裝 2:redis鍵值操作 3:redis數(shù)據(jù)類型string,link,set,order set, hash 4:事務(wù) 5:消息訂閱 6:持久化 7:集群 8:PHP-redis客戶端 9: 運(yùn)維 10: 仿微博實(shí)戰(zhàn),.,3,1.1 redis特點(diǎn)介紹,REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo 寫的key-value存儲系統(tǒng)。 Redis提供了一些豐富的數(shù)據(jù)結(jié)構(gòu), 包括 lists, sets, ordered sets 以及 hashes , 還有和Memc

2、ached一樣的 strings結(jié)構(gòu). Redis當(dāng)然還包括了對這些數(shù)據(jù)結(jié)構(gòu)的豐富操作。 1:數(shù)據(jù)結(jié)構(gòu)豐富 2:持久化 3:支持簡單事務(wù) 4: 主從配置方便,.,4,1.2 redis安裝,不必configure 1:make 2:make PREFIX=/usr/local/redis install 3:開啟服務(wù) ./redis-server /path/to/redis.conf,.,5,1.3 redis連接,redis的協(xié)議是基礎(chǔ)文本的協(xié)議,(http,memcached也是) 客戶端的開發(fā)較為簡便 redis官方提供了C,java,C#,PHP,lua腳本的客戶端 我們在學(xué)習(xí)時,用

3、到 redis-cli 官方客戶端 及php-redis客戶端 在與redis-server同一目錄下,redis-cli即是 # /path/to/redis-cli 回車,.,6,DEL key key . 刪除多個key 返回真正被刪除的key數(shù)量 rename key newkey 重命名key-newkey 如果newkey存在,值被覆蓋 renamenx key newkey 同rename,只是newkey存在時,不進(jìn)行操作 move key db 移動key到另一個db,如果另一db有相同key,不做操作,2.1 redis鍵操作命令,.,7,keys pattern 支持*,

4、?,匹配 randomkey 隨機(jī)返回key,但不刪除 exists key 判斷key是否存在,返回1/0 type key 判斷key的類型 返回string,set,zset,link,hash expire key 用秒設(shè)置生命周期 pexpire key 用毫秒設(shè)置生命周期 persist key 使key變?yōu)橛谰?ttl key 查詢key的剩余生命周期(返回秒) pttl key 查詢key的剩余生命周期(返回毫秒) 對于不存在的key或過期key,返回-1 redis2.8對于不存在的key返回-2,2.2 redis鍵操作命令,.,8,3.1 字符串類型及期命令,SET SE

5、TNX SETEX PSETEX SETRANGE MSET MSETNX APPEND GET MGET GETRANGE GETSET STRLEN DECR DECRBY INCR INCRBY INCRBYFLOAT SETBIT GETBIT BITOP BITCOUNT,.,9,3.2.1 字符串-set命令,1:SET key value ex 過期秒數(shù) px 過期毫秒數(shù) nx xx EX second :設(shè)置鍵的過期時間為 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。 PX millisecon

6、d :設(shè)置鍵的過期時間為 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。 NX :只在鍵不存在時,才對鍵進(jìn)行設(shè)置操作。 SET key value NX 效果等同于 SETNX key value 。 XX :只在鍵已經(jīng)存在時,才對鍵進(jìn)行設(shè)置操作,.,10,3.2.2 字符串-setrange命令,SETRANGE key offset value 用 value 參數(shù)覆寫(overwrite)給定 key 所儲存的字符串值,從偏移量 offset 開始。 不存在的 key 當(dāng)作

7、空白字符串處理。 如果offset過大,則原字符和偏移量之間的空白將用零字節(jié)(zerobytes, x00 )來填充。 最大偏移量是 229-1(536870911) , 因?yàn)?Redis 字符串的大小被限制在 512 兆(megabytes)以內(nèi)。,.,11,3.2.3 字符串mset命令,mset k1 v1 k2 v2 1: 一次性設(shè)置多對鍵值 2: 原子性 3: 覆蓋舊值 4: 不想覆蓋舊值用 msetnx msetnx k1 v1 k2 v2 特點(diǎn):不覆蓋舊值,.,12,3.2.4 字符串命令-append,APPEND key value 如果 key 已經(jīng)存在并且是一個字符串,A

8、PPEND 命令將 value 追加到 key 原來的值的末尾。 如果 key 不存在, APPEND 就簡單地將給定 key 設(shè)為 value , 就像執(zhí)行 SET key value 一樣。 返回值: 追加 value 之后, key 中字符串的長度。,.,13,3.2.5 字符串操作之get,GET key 返回 key 所關(guān)聯(lián)的字符串值。 如果 key 不存在那么返回特殊值 nil 。 假如 key 儲存的值不是字符串類型,返回一個錯誤,因?yàn)?GET 只能用于處理字符串值。 可用版本: = 1.0.0 時間復(fù)雜度: O(1) 返回值: 當(dāng) key 不存在時,返回 nil ,否則,返回

9、key 的值。 如果 key 不是字符串類型,那么返回一個錯誤。,.,14,3.2.6 字符串之mget,MGET key key . 返回所有(一個或多個)給定 key 的值。 如果給定的某個 key 不存在,返回特殊值 nil,.,15,3.2.7,GETRANGE key start end 返回字符串的一部分,和PHP中substr一樣 (redis2.0以前該命令就叫substr) 左-右 0 ,1,2.計數(shù) 右-左 -1,-2,-3 .計數(shù),.,16,3.2.8 getset,GETSET key newvalue 設(shè)置新值,并返回舊值 redis GETSET db mongod

10、b # 沒有舊值,返回 nil (nil) redis GET db mongodb redis GETSET db redis # 返回舊值 mongodb mongodb redis GET db redis,.,17,STRLEN key 返回 key 所儲存的字符串值的長度。 key不存在是返回0 key 存在但不是字符串類型時,返回一個錯誤。,3.2.9 字符串操作之getset,.,18,3.2.10 字符串操作之getbit,GETBIT key offset 對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)。 當(dāng) offset 比字符串值的長度大,或者 key 不存

11、在時,返回 0 (不能判斷確實(shí)為0,還是offset不對) 注意:位從左邊,從0記數(shù),.,19,3.2.11 字符串操作之setbit,SETBIT key offset value 設(shè)置或清除指定偏移量上的位(bit)為0/1 1:當(dāng) key 不存在時,自動生成一個新的字符串值。 2:字符串會進(jìn)行伸展(grown)以確保它可以將 value 保存在指定的偏移量上。 當(dāng)字符串值進(jìn)行伸展時,空白位置以 0 填充。 3:offset 參數(shù)必須大于或等于 0 ,小于 232 。 4:返回值為該bit之前的值 用此功能把a(bǔ)-A,.,20,3.2.12 字符串操作之bitop,BITOP operati

12、on destkey key1 key2 . 對key1,key2.keyN作operation,并將結(jié)果保存到 destkey 上。 operation 可以是 AND 、 OR 、 NOT 、 XOR 注:NOT 操作時,key只能有1個,.,21,3.3.1 link鏈表-lpush,LPUSH key value value . 將一個或多個值 value 插入到列表 key 的表頭(l指left) 如果有多個 value 值,那么各個 value 值按從左到右的順序依次插入到表頭: 如說,對空列表 mylist 執(zhí)行命令 LPUSH mylist a b c ,列表的值將是 c b

13、a , 返回值: 操作后的元素數(shù)量 注: 1:key 不存在,自動創(chuàng)建空列表并執(zhí)行 LPUSH 操作。 2:key 存在但不是列表類型時,返回一個錯誤。 3: rpush key value 是把值插入到鏈表尾部,不再單述 4: lpushx 在key不存在時,不自動創(chuàng)建鏈接,不再單述,.,22,3.3.2 鏈表之lpop,LPOP key 移除并返回列表 key 的頭元素。 返回值:列表的頭元素。 當(dāng) key 不存在時,返回 nil 注: rpop key 移除并返回列表key的尾元素,不單述,.,23,3.3.3 鏈表之blpop,BLPOP key key . timeout BLPOP

14、 是列表的阻塞式(blocking)彈出原語。 它是 LPOP 命令的阻塞版本,當(dāng)給定列表內(nèi)沒有任何元素可供彈出的時候, 連接將被 BLPOP 命令阻塞,直到等待超時或發(fā)現(xiàn)可彈出元素為止。 當(dāng)給定多個 key 參數(shù)時,按參數(shù) key 的先后順序依次檢查各個列表, 彈出第一個非空列表的頭元素并結(jié)束命令。 注: 1: timeout為0則不超時 2: 此功能有什么用? brpop:阻塞彈出隊列尾部的元素,不再單述,.,24,3.3.4 鏈表之llen,LLEN key 返回列表 key 的長度。 注: key 不存在,返回 0 key 不是列表類型,返回錯誤,.,25,3.3.5 鏈表之lrang

15、e,LRANGE key start stop 返回列表指定區(qū)間內(nèi)的元素,區(qū)間以偏移量 start 和 stop 指定。 左數(shù)從0開始,右數(shù)-1開始 注: 1:start大于length,或start位于stop右邊,則LRANGE 返回一個空列表 2:如果 stop 下標(biāo)比 end 下標(biāo)還要大,Redis將 stop 的值設(shè)置為 end,.,26,3.3.5 鏈表之lrem,LREM key count value 根據(jù)參數(shù) count 的值,移除列表中與參數(shù) value 相等的元素。 count 的值可以是以下幾種: count 0 : 從表頭開始向表尾搜索,移除與 value 相等的元素

16、,數(shù)量為 count 。 count 0 : 從表頭開始向表尾搜索,移除與 value 相等的元素,數(shù)量為 count 。 count stop的元素 ZSCORE key member 返回成員 member 的 score 值。 如果 member 元素不是有序集 key 的成員,或 key 不存在,返回 nil 。 zrevrange key start stop withscores 倒序排列后,返回start-stop的元素,.,41,ZRANGEBYSCORE key min max WITHSCORES LIMIT offset count 按分?jǐn)?shù)(升續(xù))排序,取min,max之

17、間的值, 并偏移offset取count個 zrevrangebyscore 不解釋 ZRANK key member 返回member的排名,升序比較,從第0名開始 zrevrank key member 不解釋 ZREMRANGEBYRANK key start stop 按排名刪除 start-stop名的元素 zremrangebyscore key start,stop 按分?jǐn)?shù)刪除start,stop之間的元素 ZINTERSTORE destination numkeys key key . WEIGHTS weight weight . AGGREGATE SUM|MIN|MAX

18、 求交集 ZUNIONSTORE destination numkeys key key . WEIGHTS weight weight . AGGREGATE SUM|MIN|MAX 求并集,3.5.2 有序集合,.,42,HSET key field value 將哈希表 key 中的域 field 的值設(shè)為 value key 不存在,則創(chuàng)建 field 已存在,則覆蓋。 HSETNX key field value 設(shè)置key 中的域 field 的值設(shè)置為 value, field 不存在時才有效 HMSET key field1 value1 field2 value2 . 設(shè)置多

19、個域field/value HGET key field 返回key 中給定域 field 的值 HMGET key field field . 返回多個field的值,3.6.1 哈希(hash)操作,.,43,HGETALL key 返回哈希表所有的域和值。 HDEL key field field . 刪除指定域,返回成功刪除的元素個數(shù) HLEN key 返回hash表中的元素個數(shù) HEXISTS key field 判斷指定域是否存在 HINCRBY key field increment field 的值加上增量 increment 。 HINCRBYFLOAT key field

20、increment 不解釋 hkeys 返回哈希表中所有鍵 hvalues 返回哈希表中所有值,3.6.2 哈希(hash)操作,.,44,watch key1 key2 unwtach key1 key2 multi command command . discard/exec 注意:如果命令格式有誤,exec會報錯 如果命令格式不錯,只是邏輯錯,exec不執(zhí)行正確的命令-需要程序員去負(fù)責(zé),4.1 事務(wù)操作,.,45,5.1 發(fā)布與訂閱,subscribe-頻道-publish subscribe news -訂閱新聞頻道 publish news 內(nèi)容-發(fā)布新聞內(nèi)容 適宜做在線聊天,消息推

21、送,.,46,5.2 發(fā)布與訂閱,SUBSCRIBE channel channel . 訂閱給定的一個或多個頻道的信息。 UNSUBSCRIBE channel channel . 指示客戶端退訂給定的頻道。 如果沒有頻道被指定,也即是,一個無參數(shù)的 UNSUBSCRIBE 調(diào)用被執(zhí)行, 那么客戶端使用 SUBSCRIBE 命令訂閱的所有頻道都會被退訂 PUNSUBSCRIBE pattern pattern . 指示客戶端退訂所有給定模式。,.,47,持久化: 即把數(shù)據(jù)存儲于斷電后不會丟失的設(shè)備中,通常是硬盤. 常見的持久化方式: 主從:通過從服務(wù)器保存和持久化,如mongoDB的repl

22、ication sets配置 日志:操作生成相關(guān)日志,并通過日志來恢復(fù)數(shù)據(jù) couchDB對于數(shù)據(jù)內(nèi)容,不修改,只追加,則文件本身就是日志,不會丟失數(shù)據(jù).,6.1 持久化的方式,.,48,6.2 redis-之rdb快照持久化,rdb的工作原理: 每隔N分鐘或N次寫操作后, 從內(nèi)存dump數(shù)據(jù)形成rdb文件, 壓縮 放在備份目錄 注:紅色部分可通過參數(shù)來配置,.,49,save 900 1 #刷新快照到硬盤中,必須滿足兩者要求才會觸發(fā),即900秒之后至少1個關(guān)鍵字發(fā)生變化。 save 300 10 #必須是300秒之后至少10個關(guān)鍵字發(fā)生變化。 save 60 10000 #必須是60秒之后至

23、少10000個關(guān)鍵字發(fā)生變化。 stop-writes-on-bgsave-error yes #后臺存儲錯誤停止寫。 rdbcompression yes #使用LZF壓縮rdb文件。 rdbchecksum yes #存儲和加載rdb文件時校驗(yàn)。 dbfilename dump.rdb #設(shè)置rdb文件名。 dir ./ #設(shè)置工作目錄,rdb文件會寫入該目錄。,6.3 rdb快照相關(guān)參數(shù),.,50,6.4 rdb的缺陷,斷電,在2個保存點(diǎn)之間,斷電, 將會丟失1-N分鐘的數(shù)據(jù) 出于對持久化的更精細(xì)要求,redis增添了aof方式 append only file,.,51,6.5 aof

24、的原理,redis主進(jìn)程,后臺 日志 進(jìn)程,aof文件,set append . . 寫操作,1:每個命令重寫一次aof? 2:某key操作100次,產(chǎn)生100行記錄,aof文件會很大,怎么解決?,.,52,appendonly no #是否僅要日志 appendfsync no # 系統(tǒng)緩沖,統(tǒng)一寫,速度快 appendfsync always # 系統(tǒng)不緩沖,直接寫,慢,丟失數(shù)據(jù)少 appendfsync everysec #折衷,每秒寫1次 no-appendfsync-on-rewrite no #重寫aof時同步最新數(shù)據(jù) auto-AOF-rewrite-percentage 100

25、 當(dāng)前aof文件是上次重寫是大N%時重寫 auto-AOF-rewrite-min-size 64mb aof重寫至少要達(dá)到的大小,6.6 aof日志持久化,.,53,7.1 集群的作用,1: 主從備份 防止主機(jī)宕機(jī) 2: 讀寫分離,分擔(dān)master的任務(wù) 3: 任務(wù)分離,如從服分別分擔(dān)備份工作與計算工作,.,54,7.2 redis集群,master,slave1,slave2,master,slave1,slave2,第2種方式的好處: master宕機(jī)后, 可以直接切換到slave1,.,55,7.3 主從通信過程,master,slave,sync自動,dump出rdb,緩沖的aof,

26、replicationFeedSlaves,.,56,7.4 redis集群配置,Master配置: 1:關(guān)閉rdb快照(備份工作交給slave) 2:可以開啟aof slave配置: 1: 聲明slave-of 2: 配置密碼如果master有密碼 3: 某1個slave打開 rdb快照功能 4: 配置是否只讀slave-read-only,.,57,7.5 redis主從復(fù)制的缺陷,缺陷: 每次salave斷開后,(無論是主動斷開,還是網(wǎng)絡(luò)故障) 再連接master 都要master全部dump出來rdb,再aof,即同步的過程都要重新執(zhí)行1遍. 所以要記住-多臺slave不要一下都啟動起

27、來,否則master可能IO劇增,.,58,8.1 PHP-redis客戶端, 編譯: # /usr/local/php/bin/phpize # ./configure -with-php-config=/usr/local/php/bin/php-config # make & make install 引入: vim php.ini extension=/php/extension/path/redis.so,.,59,9.1 運(yùn)維常用的server端命令,TIME 查看時間戳與微秒數(shù) DBSIZE 查看當(dāng)前庫中的key數(shù)量 BGREWRITEAOF 后臺進(jìn)程重寫AOF BGSAVE 后

28、臺保存rdb快照 SAVE 保存rdb快照 LASTSAVE 上次保存時間 SLAVEOF 設(shè)為slave服務(wù)器 FLUSHALL 清空所有db FLUSHDB 清空當(dāng)前db SHUTDOWN|save|nosave 斷開連接,關(guān)閉服務(wù)器 SLOWLOG 顯示慢查詢 INFO 顯示服務(wù)器信息 CONFIG GET 獲取配置信息 CONFIG SET 設(shè)置配置信息 MONITOR 打開控制臺 SYNC 主從同步 CLIENT LIST 客戶端列表 CLIENT KILL 關(guān)閉某個客戶端 CLIENT SETNAME 為客戶端設(shè)置名字 CLIENT GETNAME 獲取客戶端名字,.,60,9.2 運(yùn)維時的觀察參數(shù),1: 內(nèi)存 # Memory used_memory:859192 數(shù)據(jù)結(jié)構(gòu)的空間 used_memory_rss

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論