




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、RedisRedis使用及運(yùn)維使用及運(yùn)維By 薛長(zhǎng)俊2013-8介紹介紹數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型持久化持久化RedisRedis使用使用主從復(fù)制主從復(fù)制Redis介紹 簡(jiǎn)介Redis 是一個(gè)開(kāi)源、支持網(wǎng)絡(luò)、基于內(nèi)存、鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù),使用 ANSI C 編寫(xiě)。其開(kāi)發(fā)由 VMware 主持。目前Redis已是最流行的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù)之一。 與memcached比較Redis不僅僅支持簡(jiǎn)單的k/v類(lèi)型的數(shù)據(jù),同時(shí)還提供list,set,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ);Redis支持?jǐn)?shù)據(jù)的主從復(fù)制,即master-slave模式的數(shù)據(jù)備份;Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存到磁盤(pán)中,重啟的時(shí)候可以
2、再次加載原有數(shù)據(jù);Redis單個(gè)value的最大限制是1GB, memcached只能保存1MB的數(shù)據(jù)。Redis特性 速度快Redis使用C編寫(xiě),而且將所有數(shù)據(jù)加載到內(nèi)存中,所以速度非???。 數(shù)據(jù)結(jié)構(gòu)可以將Redis看做“數(shù)據(jù)結(jié)構(gòu)服務(wù)器”。目前,Redis支持5種數(shù)據(jù)結(jié)構(gòu)。 持久化支持?jǐn)?shù)據(jù)持久化存儲(chǔ)。 主-從復(fù)制Redis支持簡(jiǎn)單而快速的主-從復(fù)制。 支持過(guò)期時(shí)間支持緩存過(guò)期自動(dòng)失效。 支持事務(wù)操作允許讓一組命令進(jìn)入隊(duì)列一次性執(zhí)行,在執(zhí)行的過(guò)程中不穿插其它命令。 PUB/SUB支持發(fā)布訂閱。Redis特性 Redis不足支持事務(wù),將多個(gè)命令打包執(zhí)行,但是任一命令有語(yǔ)法錯(cuò)誤或key-value
3、數(shù)據(jù)類(lèi)型錯(cuò)誤照常運(yùn)行;數(shù)據(jù)結(jié)構(gòu)不支持嵌套其他數(shù)據(jù)結(jié)構(gòu),比如類(lèi)型為list的value不能再嵌套一個(gè)list。單線(xiàn)程模型處理所客戶(hù)請(qǐng)求的命令。對(duì)高并發(fā)支持不是很好主從做冗余備份時(shí),主機(jī)迭機(jī)后,不能從多個(gè)從機(jī)中自動(dòng)選舉出主機(jī)當(dāng)Dump.rdb文件中沒(méi)有日志文件appendonly.aof最新數(shù)據(jù)時(shí),不能從日志文件的最新命令的當(dāng)前位置處增量更新dump.rdb數(shù)據(jù)文件。Redis特性 string字符串。 list字符串列表。 set無(wú)序不重復(fù)的字符串集合。 zset有序不重復(fù)的字符串集合。 hashs鍵、值都為字符串的哈希表。Redis數(shù)據(jù)類(lèi)型 主鍵(key)可以用任何二進(jìn)制序列作為key值,從形
4、如”foo”的簡(jiǎn)單字符串到一個(gè)JPEG文件的內(nèi)容都可以??兆址彩怯行ey值。 關(guān)于key的幾條規(guī)則可以用任何二進(jìn)制序列作為key值。不用太長(zhǎng)的鍵值。不僅消耗內(nèi)存,而且在數(shù)據(jù)查找中計(jì)算成本很高。 太短的鍵值通常也不是好主意。如果你要用“u:1000:pwd”來(lái)代替“user:1000:password”,這沒(méi)有什么問(wèn)題,但后者更易閱讀,并且由此增加的空間消耗相對(duì)于key object和value object本身來(lái)說(shuō)很小。最好堅(jiān)持一種模式。例如:“object-type:id:field”就是個(gè)不錯(cuò)的注意,像這樣“user:1000:password”。Redis數(shù)據(jù)類(lèi)型 key 相關(guān)命令
5、exits key,測(cè)試指定key是否存在,返回1表示存在,0不存在;del key1 key2 .keyN,刪除給定key,返回刪除key的數(shù)目,0表示給定key都不存在;type key,返回給定key的value值類(lèi)型。返回 none 表示不存在key,string字符串類(lèi)型,list鏈表類(lèi)型,set無(wú)序集合類(lèi)型 ;keys pattern,返回匹配指定模式的所有key;random key,返回從當(dāng)前數(shù)據(jù)庫(kù)中隨機(jī)選擇的一個(gè)key,如果數(shù)據(jù)庫(kù)是空的,返回空串 ;rename oldkey newkey,原子的重命名一個(gè)key,如果newkey存在,將會(huì)被覆蓋,返回1表示成功,0失敗??赡?/p>
6、是oldkey不存在或者和newkey相同;dbsize,返回當(dāng)前數(shù)據(jù)庫(kù)的key數(shù)量;expire key seconds,為key指定過(guò)期時(shí)間,單位是秒。返回1成功,0表示key已經(jīng)設(shè)置過(guò)過(guò)期時(shí)間或者不存在;Redis數(shù)據(jù)類(lèi)型 key 相關(guān)命令select db-index,通過(guò)索引選擇數(shù)據(jù)庫(kù),默認(rèn)連接的數(shù)據(jù)庫(kù)所有是0,默認(rèn)數(shù)據(jù)庫(kù)數(shù)是16個(gè)。返回1表示成功,0失??;move key db-index,將key從當(dāng)前數(shù)據(jù)庫(kù)移動(dòng)到指定數(shù)據(jù)庫(kù)。返回1成功。0 如果key不存在,或者已經(jīng)在指定數(shù)據(jù)庫(kù)中;flushdb,刪除當(dāng)前數(shù)據(jù)庫(kù)中所有key,此方法不會(huì)失敗。慎用。flushall,刪除所有數(shù)據(jù)庫(kù)
7、中的所有key,此方法不會(huì)失敗。慎用。Redis數(shù)據(jù)類(lèi)型 string類(lèi)型-特點(diǎn)string是redis最基本的類(lèi)型,而且string類(lèi)型是二進(jìn)制安全的。意思是redis的string可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對(duì)象;從內(nèi)部實(shí)現(xiàn)來(lái)看其實(shí)string可以看作byte數(shù)組,最大上限是1G字節(jié);string類(lèi)型的值也可視為integer,從而可以讓“incr”命令族操作;在list、set和zset中包含的獨(dú)立的元素類(lèi)型都是string類(lèi)型。 string類(lèi)型-應(yīng)用場(chǎng)景string是最常用的一種數(shù)據(jù)類(lèi)型,普通的key/value存儲(chǔ)。如果你只用這種類(lèi)型,Redis就像一個(gè)可以持久化的
8、memcached服務(wù)器。當(dāng)然redis對(duì)string類(lèi)型的操作比memcached要多。Redis數(shù)據(jù)類(lèi)型 string常見(jiàn)命令set key value,設(shè)置key對(duì)應(yīng)的值為string類(lèi)型的value,返回1表示成功,0失敗setnx key value,同上,如果key已經(jīng)存在,返回0 。nx 是not exist的意思get key,獲取key對(duì)應(yīng)的string值,如果key不存在返回nilgetset key value,原子的設(shè)置key的值,并返回key的舊值。如果key不存在返回nilmget key1 key2 . keyN,一次獲取多個(gè)key的值,如果對(duì)應(yīng)key不存在,則對(duì)
9、應(yīng)返回nilmset key1 value1 . keyN valueN,一次設(shè)置多個(gè)key的值,成功返回1表示所有的值都設(shè)置了,失敗返回0表示沒(méi)有任何值被設(shè)置msetnx key1 value1 . keyN valueN,同上,但是不會(huì)覆蓋已經(jīng)存在的keyRedis數(shù)據(jù)類(lèi)型 string常見(jiàn)命令incr key,對(duì)key的值做加加操作,并返回新的值。注意incr一個(gè)不是int的value會(huì)返回錯(cuò)誤,incr一個(gè)不存在的key,則設(shè)置key為1decr key,同上,但是做的是減操作,decr一個(gè)不存在key,則設(shè)置key為-1incrby key integer,同incr,加指定值 ,k
10、ey不存在時(shí)候會(huì)設(shè)置key,并認(rèn)為原來(lái)的value是 0decrby key integer,同decr,減指定值。decrby完全是為了可讀性,我們完全可以通過(guò)incrby一個(gè)負(fù)值來(lái)實(shí)現(xiàn)同樣效果,反之一樣append key value,給指定key的字符串值追加value,返回新字符串值的長(zhǎng)度Redis數(shù)據(jù)類(lèi)型 list類(lèi)型-特點(diǎn)Redis的list類(lèi)型其實(shí)就是一個(gè)每個(gè)子元素都是string類(lèi)型的雙向鏈表。這意味著即使在一個(gè)list中有數(shù)百萬(wàn)個(gè)元素,在頭部或尾部添加一個(gè)元素的操作,其時(shí)間復(fù)雜度也是常數(shù)級(jí)別的;可以通過(guò)push,pop操作從鏈表的頭部或者尾部添加刪除元素。這使得list既可以
11、用作棧,也可以用作隊(duì)列;list的最大長(zhǎng)度是232-1個(gè)元素。 list類(lèi)型-應(yīng)用場(chǎng)景Redis list應(yīng)用場(chǎng)景非常多,也是Redis最重要的數(shù)據(jù)結(jié)構(gòu)之一,比如微博的關(guān)注列表,粉絲列表等都可以用Redis的list結(jié)構(gòu)來(lái)實(shí)現(xiàn);博客實(shí)現(xiàn)中,可為每篇日志設(shè)置一個(gè)list,在該list中推入進(jìn)博客評(píng)論;也可以使用redis list實(shí)現(xiàn)消息隊(duì)列。Redis數(shù)據(jù)類(lèi)型 list常見(jiàn)命令lpush key string,在key對(duì)應(yīng)list的頭部添加字符串元素,返回1表示成功,0表示key存在且不是list類(lèi)型;rpush key string,同上,在尾部添加;llen key,返回key對(duì)應(yīng)list
12、的長(zhǎng)度,key不存在返回0,如果key對(duì)應(yīng)類(lèi)型不是list返回錯(cuò)誤;lrange key start end,返回指定區(qū)間內(nèi)的元素,下標(biāo)從0開(kāi)始,負(fù)值表示從后面計(jì)算,-1表示倒數(shù)第一個(gè)元素 ,key不存在返回空列表;ltrim key start end ,截取list,保留指定區(qū)間內(nèi)元素,成功返回1,key不存在返回錯(cuò)誤;lset key index value,設(shè)置list中指定下標(biāo)的元素值,成功返回1,key或者下標(biāo)不存在返回錯(cuò)誤;lrem key count value,從key對(duì)應(yīng)list中刪除count個(gè)和value相同的元素。count為0時(shí)候刪除全部;Redis數(shù)據(jù)類(lèi)型 lis
13、t常見(jiàn)命令lpop key,從list的頭部刪除元素,并返回刪除元素。如果key對(duì)應(yīng)list不存在或者是空返回nil,如果key對(duì)應(yīng)值不是list返回錯(cuò)誤;rpop,同上,但是從尾部刪除;blpop key1.keyN timeout,從左到右掃描返回對(duì)第一個(gè)非空l(shuí)ist進(jìn)行l(wèi)pop操作并返回,比如blpop list1 list2 list3 0 ,如果list不存在list2,list3都是非空則對(duì)list2做lpop并返回從list2中刪除的元素。如果所有的list都是空或不存在,則會(huì)阻塞timeout秒,timeout為0表示一直阻塞。當(dāng)阻塞時(shí),如果有client對(duì)key1.keyN中
14、的任意key進(jìn)行push操作,則第一在這個(gè)key上被阻塞的client會(huì)立即返回。如果超時(shí)發(fā)生,則返回nil。有點(diǎn)像unix的select或者poll;brpop,同blpop,一個(gè)是從頭部刪除一個(gè)是從尾部刪除;rpoplpush srckey destkey,從srckey對(duì)應(yīng)list的尾部移除元素并添加到destkey對(duì)應(yīng)list的頭部,最后返回被移除的元素值,整個(gè)操作是原子的.如果srckey是空或者不存在返回nil。Redis數(shù)據(jù)類(lèi)型 set類(lèi)型-特點(diǎn)set就是redis string的無(wú)序集合,不允許有重復(fù)元素;set的最大元素?cái)?shù)是232-1;對(duì)set的操作還有交集、并集、差集等。
15、set類(lèi)型-應(yīng)用場(chǎng)景set對(duì)外提供的功能與list類(lèi)似,當(dāng)你需要存儲(chǔ)一個(gè)列表數(shù)據(jù),又不希望出現(xiàn)重復(fù)數(shù)據(jù)時(shí),set 是一個(gè)很好的選擇,并且set提供了判斷某個(gè)成員是否在一個(gè)set集合內(nèi)的接口,這個(gè)也是list所不能提供的??梢杂肦edis set結(jié)構(gòu)實(shí)現(xiàn)SNS中的好友推薦和blog的tag功能。Redis數(shù)據(jù)類(lèi)型 set常見(jiàn)命令sadd key member,添加一個(gè)string元素到,key對(duì)應(yīng)的set集合中,成功返回1,如果元素以及在集合中返回0,key對(duì)應(yīng)的set不存在返回錯(cuò)誤;srem key member,從key對(duì)應(yīng)set中移除給定元素,成功返回1,如果member在集合中不存在或者
16、key不存在返回0,如果key對(duì)應(yīng)的不是set類(lèi)型的值返回錯(cuò)誤;spop key,刪除并返回key對(duì)應(yīng)set中隨機(jī)的一個(gè)元素, set是空或者key不存在返回nil;srandmember key,同spop,隨機(jī)取set中的一個(gè)元素,但是不刪除元素;smove srckey dstkey member,從srckey對(duì)應(yīng)set中移除member并添加到dstkey對(duì)應(yīng)set中,整個(gè)操作是原子的;scard key,返回set的元素個(gè)數(shù),如果set是空或者key不存在返回0;Redis數(shù)據(jù)類(lèi)型 set常見(jiàn)命令sismember key member,判斷member是否在set中,存在返回1;
17、sinter key1 key2.keyN,返回所有給定key的交集;sinterstore dstkey key1.keyN,同sinter,但是會(huì)同時(shí)將交集存到dstkey下;sunion key1 key2.keyN,返回所有給定key的并集;sunionstore dstkey key1.keyN,同sunion,并同時(shí)保存并集到dstkey下;sdiff key1 key2.keyN,返回key1與所有key的不同元素;sdiffstore dstkey key1.keyN,同sdiff,并同時(shí)保存差集到dstkey下;smembers key,返回key對(duì)應(yīng)set的所有元素,結(jié)果是
18、無(wú)序的。Redis數(shù)據(jù)類(lèi)型 sorted set類(lèi)型-特點(diǎn)sorted set也是string類(lèi)型元素的集合,不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類(lèi)型的score。有序集合是通過(guò)一個(gè)dual-ported 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的,它包含一個(gè)精簡(jiǎn)的有序列表和一個(gè)hash table,因此添加一個(gè)元素的時(shí)間復(fù)雜度是O(log(N);sorted set的最大元素?cái)?shù)是232-1;對(duì)于已經(jīng)有序的zset,仍然可以使用sort命令,通過(guò)指定asc|desc參數(shù)對(duì)其進(jìn)行排序(但這次服務(wù)器要耗費(fèi)CPU了); sorted set類(lèi)型-應(yīng)用場(chǎng)景當(dāng)你需要一個(gè)有序的并且不重復(fù)的集合列表,那么可以選擇sorted se
19、t數(shù)據(jù)結(jié)構(gòu);使用sorted set甚至可以構(gòu)建有優(yōu)先級(jí)的隊(duì)列系統(tǒng);排行榜應(yīng)用,取TOP N操作。Redis數(shù)據(jù)類(lèi)型 sorted set常見(jiàn)命令zadd key score member,添加元素到集合,元素在集合中存在則更新對(duì)應(yīng)score;zrem key member,刪除指定元素,1表示成功,如果元素不存在返回0;zincrby key incr member,增加對(duì)應(yīng)member的score值,然后移動(dòng)元素并保持skip list保持有序。返回更新后的score值;zrank key member,返回指定元素在集合中的排名(下標(biāo)),集合中元素是按score從小到大排序的;zrevr
20、ank key member,同上,但是集合中元素是按score從大到小排序;zrange key start end,從集合中去指定區(qū)間的元素。返回的是有序結(jié)果;zrevrange key start end,同上,返回結(jié)果是按score逆序的;Redis數(shù)據(jù)類(lèi)型 sorted set常見(jiàn)命令zrangebyscore key min max,返回集合中score在給定區(qū)間的元素;zcount key min max,返回集合中score在給定區(qū)間的數(shù)量;zcard key,返回集合中元素個(gè)數(shù);zscore key element,返回給定元素對(duì)應(yīng)的score;zremrangebyrank
21、 key min max,刪除集合中排名在給定區(qū)間的元素;zremrangebyscore key min max,刪除集合中score在給定區(qū)間的元素;Redis數(shù)據(jù)類(lèi)型 hash類(lèi)型-特點(diǎn)Redis hash是一個(gè)string類(lèi)型的field和value的映射表。它的添加,刪除操作都是O(1) 。hash特別適合用于存儲(chǔ)對(duì)象;將一個(gè)對(duì)象存儲(chǔ)在hash類(lèi)型中會(huì)占用更少的內(nèi)存,并且可以更方便的存取整個(gè)對(duì)象;在Hash中可以只保存有限的幾個(gè)“域”,而不是將所有的“域”作為key,這可以節(jié)省內(nèi)存。 hash類(lèi)型-應(yīng)用場(chǎng)景比如,我們存儲(chǔ)供應(yīng)商酒店價(jià)格的時(shí)候可以采取此結(jié)構(gòu),用酒店編碼作為Key,Rat
22、ePlan+RoomType作為Filed,價(jià)格信息作為Value。Redis數(shù)據(jù)類(lèi)型 hash常見(jiàn)命令hset key field value,設(shè)置hash field為指定值,如果key不存在,則先創(chuàng)建;hget key field ,獲取指定的hash field;hmget key filed1.fieldN,獲取全部指定的hash filed;hmset key filed1 value1 . filedN valueN,同時(shí)設(shè)置hash的多個(gè)field;hincrby key field integer,將指定的hash filed 加上給定值;hexists key field,
23、測(cè)試指定field是否存在;hdel key field,刪除指定的hash field;hlen key,返回指定hash的field數(shù)量;hkeys key,返回hash的所有field;hvals key,返回hash的所有value;hgetall,返回hash的所有filed和value。Redis數(shù)據(jù)類(lèi)型 排序Redis支持對(duì)list,set和sorted set元素的排序。排序命令是sort。命令格式如下:SORT key BY pattern LIMIT start count GET pattern ASC|DESC ALPHA STORE dstkey 例如:Redis數(shù)據(jù)
24、類(lèi)型 持久化Redis是一個(gè)支持持久化的內(nèi)存數(shù)據(jù)庫(kù),也就是說(shuō)redis需要經(jīng)常將內(nèi)存中的數(shù)據(jù)同步到磁盤(pán)來(lái)保證持久化。redis支持兩種持久化方式,一種是 Snapshotting(快照)也是默認(rèn)方式,另一種是Append-only file(縮寫(xiě)aof)的方式。Redis持久化持久化 快照(SnapShot)當(dāng)前數(shù)據(jù)的快照存成一個(gè)數(shù)據(jù)文件的持久化機(jī)制。 頻率控制( redis.conf ) 過(guò)程Redis通過(guò)fork產(chǎn)生子進(jìn)程;父進(jìn)程繼續(xù)處理client請(qǐng)求,子進(jìn)程負(fù)責(zé)將快照寫(xiě)入臨時(shí)文件;子進(jìn)程寫(xiě)完后,用臨時(shí)文件替換原來(lái)的快照文件,然后子進(jìn)程退出。Redis持久化持久化save 900 1 #
25、900秒超過(guò)1個(gè)key被修改 save 300 10 #300秒超過(guò)10個(gè)key被修改 save 60 10000 #60 秒超過(guò)一萬(wàn)條被修改 優(yōu)點(diǎn)整個(gè)Redis數(shù)據(jù)庫(kù)將只包含一個(gè)文件,這對(duì)于文件備份而言是非常完美的;對(duì)于災(zāi)難恢復(fù),可以非常輕松的將一個(gè)單獨(dú)的文件壓縮后再轉(zhuǎn)移到其它存儲(chǔ)介質(zhì)上;性能最大化;相比于AOF機(jī)制,如果數(shù)據(jù)集很大,RDB的啟動(dòng)效率會(huì)更高。 缺點(diǎn)每次快照持久化都是將內(nèi)存數(shù)據(jù)完整寫(xiě)入到磁盤(pán)一次,并不 是增量的只同步臟數(shù)據(jù)。如果數(shù)據(jù)量大的話(huà),而且寫(xiě)操作比較多,必然會(huì)引起大量的磁盤(pán)io操作,可能會(huì)嚴(yán)重影響性能;另外由于快照方式是在一定間隔時(shí)間做一次的,所以如果redis意外dow
26、n掉的話(huà),就會(huì)丟失最后一次快照后的所有修改;如果應(yīng)用不能丟失任何修改的話(huà),可以采用aof持久化方式。Redis持久化持久化 AOF(append only file)記錄每次的讀寫(xiě)操作的文件。 頻率控制( redis.conf ) 過(guò)程Redis 通過(guò)fork一個(gè)子進(jìn)程,遍歷數(shù)據(jù),寫(xiě)入新臨時(shí)文件;父進(jìn)程繼續(xù)處理client請(qǐng)求,子進(jìn)程繼續(xù)寫(xiě)臨時(shí)文件;父進(jìn)程把新寫(xiě)入的AOF寫(xiě)在緩沖區(qū);子進(jìn)程寫(xiě)完退出,父進(jìn)程接收退出消息,將緩沖區(qū)AOF寫(xiě)入臨時(shí)文件;臨時(shí)文件重命名成appendonly.aof,原來(lái)文件被覆蓋,整個(gè)過(guò)程完成。Redis持久化持久化save 900 1 #900秒超過(guò)1個(gè)key被修改
27、 save 300 10 #300秒超過(guò)10個(gè)key被修改 save 60 10000 #60 秒超過(guò)一萬(wàn)條被修改 日志文件在Redis配置文件中有一個(gè)叫appendonly的選項(xiàng),可以寫(xiě)yes或no.這個(gè)選項(xiàng)就是負(fù)責(zé)是否開(kāi)啟AOF日志的開(kāi)關(guān);日志文件通病,如果只增不減的話(huà),那文件將會(huì)無(wú)限長(zhǎng)大;執(zhí)行bgrewriterof命令,先給當(dāng)前的所有數(shù)據(jù)做一個(gè)快照,然后再在這個(gè)快照的基礎(chǔ)上寫(xiě)接下來(lái)的日志,刪除舊的日志。 寫(xiě)入磁盤(pán)時(shí)命令 appendonly yes,啟用aof持久化方式;appendfsync always,每次收到寫(xiě)命令就立即強(qiáng)制 寫(xiě)入磁盤(pán),最慢的,但是保證完全的持久化,不推薦使用;
28、appendfsync everysec,每秒鐘強(qiáng)制寫(xiě)入磁盤(pán)一次,在性能和持久化方面做了很好的折中,推薦;appendfsync no,完全依賴(lài)os,性能最好,持久化沒(méi)保證。Redis持久化持久化 對(duì)比分析快照易丟失數(shù)據(jù),AOF模式較為安全,但日志重寫(xiě)時(shí)磁盤(pán)io開(kāi)銷(xiāo)大,容易導(dǎo)致服務(wù)器性能?chē)?yán)重下降,并且需要足夠的物理內(nèi)存,這個(gè)比較危險(xiǎn),所以在高性能服務(wù)器上一般是用主從復(fù)制來(lái)進(jìn)行持久化。Redis持久化持久化 特點(diǎn)master可以有多個(gè)slave。除了多個(gè)slave連到相同的master外,slave也可以連接其他slave形成圖狀結(jié)構(gòu)。主從復(fù)制不會(huì)阻塞master。也就是說(shuō)當(dāng)一個(gè)或多個(gè)slave
29、與master進(jìn)行初次同步數(shù)據(jù)時(shí),master可以繼續(xù)處理client發(fā)來(lái)的請(qǐng)求。相反slave在初次同步數(shù)據(jù)時(shí)則會(huì)阻塞不能處理client的請(qǐng)求。主從復(fù)制可以用來(lái)提高系統(tǒng)的可伸縮性,我們可以用多個(gè)slave 專(zhuān)門(mén)用于client的讀請(qǐng)求,比如sort操作可以使用slave來(lái)處理。也可以用來(lái)做簡(jiǎn)單的數(shù)據(jù)冗余??梢栽趍aster禁用數(shù)據(jù)持久化,只需要注釋掉master 配置文件中的所有save配置,然后只在slave上配置數(shù)據(jù)持久化。Redis主從復(fù)制主從復(fù)制 配置slaveof 8359,指定master的ip和端口。 問(wèn)題slave從庫(kù)在連接Master主庫(kù)時(shí),Mas
30、ter會(huì)進(jìn)行內(nèi)存快照,然后把整個(gè)快照文件發(fā)給Slave,也就是沒(méi)有象MySQL那樣有復(fù)制位置的概念,即無(wú)增量復(fù)制,這會(huì)給整個(gè)集群搭建帶來(lái)較多問(wèn)題。Redis主從復(fù)制主從復(fù)制clientclientclientmastermastermasterslaveslaveslaveCONSISTENT HASH / 定容 readwrite同步數(shù)據(jù)slave 主從架構(gòu)示例Redis主從復(fù)制主從復(fù)制 主從復(fù)制過(guò)程Slave端在配置文件中添加了slave of指令,于是Slave啟動(dòng)時(shí)讀取配置文件,初始狀態(tài)為REDIS_REPL_CONNECT。Slave端在定時(shí)任務(wù)serverCron(Redis內(nèi)部的
31、定時(shí)器觸發(fā)事件)中連接Master,發(fā)送sync命令,然后阻塞等待master發(fā)送回其內(nèi)存快照文件(最新版的Redis已經(jīng)不需要讓Slave阻塞)。Master端收到sync命令簡(jiǎn)單判斷是否有正在進(jìn)行的內(nèi)存快照子進(jìn)程,沒(méi)有則立即開(kāi)始內(nèi)存快照,有則等待其結(jié)束,當(dāng)快照完成后會(huì)將該文件發(fā)送給Slave端。Slave端接收Master發(fā)來(lái)的內(nèi)存快照文件,保存到本地,待接收完成后,清空內(nèi)存表,重新讀取Master發(fā)來(lái)的內(nèi)存快照文件,重建整個(gè)內(nèi)存表數(shù)據(jù)結(jié)構(gòu),并最終狀態(tài)置位為 REDIS_REPL_CONNECTED狀態(tài),Slave狀態(tài)機(jī)流轉(zhuǎn)完成。Master端在發(fā)送快照文件過(guò)程中,接收的任何會(huì)改變數(shù)據(jù)集的
32、命令都會(huì)暫時(shí)先保存在Slave網(wǎng)絡(luò)連接的發(fā)送緩存隊(duì)列里(list數(shù)據(jù)結(jié)構(gòu)),待快照完成后,依次發(fā)給Slave,之后收到的命令相同處理,并將狀態(tài)置位為 REDIS_REPL_ONLINE。Redis主從復(fù)制主從復(fù)制 主從復(fù)制過(guò)程Redis主從復(fù)制主從復(fù)制部署部署客戶(hù)端客戶(hù)端RedisRedis運(yùn)維運(yùn)維架構(gòu)示例架構(gòu)示例 下載安裝mkdir -p /root/install ; cd /root/install;wget -c http:/ zxvf redis-2.4.16.tar.gzcd /root/install/redis-2.4.16makemkdir -p /opt/soft/redi
33、s2.4.16 rm -f /opt/soft/redis ; ln -s /opt/soft/redis2.4.16 /opt/soft/rediscp /root/install/redis-2.4.16/src/redis-benchmark /opt/soft/redis2.4.16/cp /root/install/redis-2.4.16/src/redis-server /opt/soft/redis2.4.16/cp /root/install/redis-2.4.16/src/redis-cli /opt/soft/redis2.4.16/cp /root/install/redis-2.4.16/src/redis-check-dump /opt/soft/redis2.4.16/cp /root/install/redis-2.4.16/src/redis-check-aof /opt/soft/redis2.4.16/Redis部署部署 配置daemonize yespidfile /dev/shm/redis.pidport 8359unix
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年下沉市場(chǎng)消費(fèi)金融風(fēng)險(xiǎn)管理策略研究報(bào)告
- 2025年體檢行業(yè)服務(wù)質(zhì)量提升與行業(yè)風(fēng)險(xiǎn)管理策略報(bào)告
- 2025年商業(yè)寫(xiě)字樓智能化系統(tǒng)初步設(shè)計(jì)評(píng)估與智能化系統(tǒng)應(yīng)用效果評(píng)估報(bào)告
- 藥品超市購(gòu)物管理制度
- 藥學(xué)門(mén)診咨詢(xún)管理制度
- 藥店店長(zhǎng)業(yè)務(wù)管理制度
- 藥店藥品效期管理制度
- 營(yíng)業(yè)場(chǎng)所庫(kù)存管理制度
- 設(shè)備保養(yǎng)檢修管理制度
- 設(shè)備備件倉(cāng)庫(kù)管理制度
- 2025年高考江蘇卷物理真題(解析版)
- 2025年重慶市中考化學(xué)試卷真題(含標(biāo)準(zhǔn)答案)
- 科學(xué)技術(shù)普及法解讀
- 醫(yī)院檢驗(yàn)科實(shí)驗(yàn)室生物安全程序文件SOP
- 北京市朝陽(yáng)區(qū)2022-2023四年級(jí)下冊(cè)數(shù)學(xué)期末試題+答案
- 發(fā)動(dòng)機(jī)裝調(diào)工:高級(jí)發(fā)動(dòng)機(jī)裝調(diào)工試題及答案
- 藥物臨床試驗(yàn)的倫理審查課件
- EHS目標(biāo)與指標(biāo)管理一覽表
- L等級(jí)考試LTE無(wú)線(xiàn)網(wǎng)絡(luò)優(yōu)化L3
- 河北省工傷職工停工留薪期分類(lèi)目錄
- PROFINET總線(xiàn)技術(shù)在汽車(chē)生產(chǎn)線(xiàn)上的應(yīng)用
評(píng)論
0/150
提交評(píng)論