版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、1Redis簡介RedisHRemoteDictionaryServer的縮寫,是一種高性能的Key-value存儲系統(tǒng),類似于Memcached,不過Redis支持存儲的value類型更多, 包括String,List,Hash,Se怵口SortedSet,以及對這些數(shù)據(jù)結(jié)構(gòu)的操作支持。和Memcached一樣,為了保證效率,RedisB勺數(shù)據(jù)都緩存在內(nèi)存中,但是Redis會周期性地把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實現(xiàn)了master-slave同步。2安裝$wgethttp:/download.redis.io/releases/redis-3.0.0.t
2、ar.gz$tarxzfredis-3.0.0.tar.gz$cp-rredis-3.0.0/usr/local/redis$cd/usr/local/redis$make#編譯好的文件將被復(fù)制到/usr/local/bin下#redis-server:Redis服務(wù)器的daemon啟動程序#redis-cli:Redis命令行操作工具#redis-benchmark:Redis性能測試工具,測試Redis在你的系統(tǒng)及你的配置下的讀寫性能$redis-benchmark-n100000-c50#模擬同時由50個客戶端發(fā)送100000個SETs/GETsg詢#redis-check-aof:更新
3、日志檢查#redis-check-dump:本地數(shù)據(jù)庫檢查2.1配置修改配置文件,并將其復(fù)制到etc目錄下$cpredis.conf/etc/redis.conf配置文件基本說明daemonize:#是否以后臺守護進程方式運行pidfile:#pid文件位置port:#監(jiān)聽的端口號timeout:#請求超時時間loglevel:#log信息級別,總共支持四個級別:debug、verbosenoticewarning,默認(rèn)為verboselogfile:#默認(rèn)為標(biāo)準(zhǔn)輸出(stdout),如果配置為守護進程方式運行,而這里又配置為日志記錄方式為標(biāo)準(zhǔn)輸出,則日志將會發(fā)送給/dev/nulldatab
4、ases:#開啟數(shù)據(jù)庫的數(shù)量。使用“SELECT庫ID”方式切換操作各個數(shù)據(jù)庫save*:#保存快照的頻率,第一個*表示多長時間,第二個*表示執(zhí)行多少次寫操作。在一定時間內(nèi)執(zhí)行一定數(shù)量的寫操作時,自動保存快照??稍O(shè)置多個條件。rdbcompression:#保存快照是否使用壓縮dbfilename:#數(shù)據(jù)快照文件名(只是文件名,不包括目錄)。默認(rèn)值為dump.rdbdir:#數(shù)據(jù)快照的保存目錄(這個是目錄)requirepass:#設(shè)置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過AUTHpassword命令提供密碼,默認(rèn)關(guān)閉。2.2啟動redis$redis-ser
5、ver/etc/redis.conf2.3關(guān)閉redis$redis-clishutdown#關(guān)閉指定端口的redis-server$redis-cli-p6379shutdown2.4Redis主從復(fù)制只需要修改slave的配置redis.conf修改如下內(nèi)容:Port6380slaveof256379#slaveofmaster的ipmaster的端口主從測試:在masterset:6379settestslavehahaOK在slaveget:6380gettestslavehaha3簡單測試$redis-server/etc
6、/redis.conf$redis-cli-p6379:6379setfoobarOK:6379getfoobar4Redis數(shù)據(jù)類型1.1String類型及操作1)Set設(shè)置key對應(yīng)的值為string類型的value例如,添加一個name=test的鍵值對,可以這樣做::6379setnametestOK2)Setnx設(shè)置key對應(yīng)的值為string類型的value。如果key已經(jīng)存在,則返回0,nx是notexist的意思。例如,添加一個name=test_new的鍵值對,可以這樣做::6379getnametest
7、”:6379setnxnametest_new(integer)0:6379getnametest”3)Setex設(shè)置key對應(yīng)的值為string類型的value,并指定此鍵值對應(yīng)的有效期。例如,添加一個sex=male的鍵值對,并指定其有效期是10秒,可以這樣做::6379setexsex10male:6379getsexmale”:6379getsex(nil)最后一次調(diào)用的時間已超過10秒范圍,因此無法取得sex鍵對應(yīng)的值。4)Setrange設(shè)置指定key的value值的子字符串。例如,將Test
8、的126郵箱替換為gmail郵箱,可以這樣做::6379getnameT”:T”其中8是指從下標(biāo)為8(包含8)的字符開始替換。5)mset一次設(shè)置多個key的值,成功后返回OK,表示所有的值都設(shè)置完畢;失敗則返回0,表示沒有任何值被設(shè)置。:6379msetkeylTestikey2Test2OK:6379getkeylTesti”:6379getkey2Test2”6)msetnx一次設(shè)置多個key的值,成功后返回OK,表示所有的值都設(shè)置完畢;失敗則返回0,表示沒有任何值被設(shè)置,但是不會覆蓋已經(jīng)存在的ke
9、y。:6379getkey1Test1”:6379getkey2Test2”:6379msetnxkey2Test2_newkey3Test3(integer)0:6379getkey2Test2”:6379getkey3(nil)可以看出,如果這條命令返回0,那么內(nèi)部的操作都會回滾,都不會被執(zhí)行。7)Get獲取key對應(yīng)的string值,如果key不存在則返回nil。例如,獲取一個庫中存在的鍵name::6379getnameTest”獲取一個庫中不存在的鍵name1,那么會返回一個n
10、il以表示無此鍵值對。(nil)8)getset設(shè)置key的值,并返回key的舊值。:6379getnameTest”:6379getsetnameTest_newTest”:6379getnameTest_new”如果key不存在會出現(xiàn)什么狀況呢?:6379getsetname1haha(nil)9)getrange獲取指定key的value值的子字符串。:6379getnameT”:6379getrangename06Test12”字符串左面下標(biāo)是從0開始的。:63
11、79getrangename-7-”字符串右面下標(biāo)是從-1開始的。:”當(dāng)下標(biāo)超出字符串長度時,將默認(rèn)為是同方向的最大下標(biāo)。1)mget一次獲取多個key的值,如果對應(yīng)的key不存在,則又應(yīng)返回nil。:6379mgetkey1key2key31)Test1”2)Test2”3)(nil)2)incr對key的值進行加加操作,并返回新的值。注意:incr不是int的value會返回錯誤信息,incr一個不存在的key,則將該key設(shè)置為1。:6379setage20OK:6379incrage(integer)21127.0
12、.0.1:6379getage21”3)incrby同incr類似,與指定值相加,key不存在的時彳會設(shè)置key,并認(rèn)為原來的value為0。:6379getage21”:6379incrbyage5(integer)26:6379getage26”4)decr對key的值進行減操作,decr一個不存在的key,則設(shè)置該key為-1。:6379getage26”:6379decrage(integer)25:6379getage25”5)decrby同decr類似,與指定值相減。127.
13、0.0.1:6379getage25”:6379decrbyage520”Decrby完全是為了增加代碼的可讀性,完全可以通過incrby一個負(fù)值來實現(xiàn)同樣的效果;:6379getage20”:6379incrbyage-5(integer)151)append給指定key的字符串值追加value,返回新字符串值的長度,例如,向name的值追加一個的字符串,那么可以這樣做:1)0.0.1:(integer)151)0.0.1:6379getnameT”2)strlen取指定key的value值的長度。:6379getnam
14、eT”:6379strlenname(integer)12:6379getage15”:6379strlenage(integer)24.2hashRedis的hash是一個string類型的field和value的映射表。1)hset設(shè)置hashfield為指定值,如果key不存在,則先創(chuàng)建。(integer)12)hsetnx設(shè)置hashfield為指定值, 如果key不存在, 則先創(chuàng)建。 如果field已經(jīng)存在, 則返回0值。nx是notexist的意思。2).0.0.1:6379hsetnxmyhashfieldHello(inte
15、ger)12).0.0.1:6379hsetnxmyhashfieldHello(integer)03)hmset同時設(shè)置hash的多個field。:6379hmsetmyhashfield1Hellofield2WorldOK4)hget獲取指定的hashfield。4).0.0.1:6379hgetmyhashfield1Hello”4).0.0.1:6379hgetmyhashfield2World”5)hmget獲取全部指定的hashfield。:6379hgetmyhashfield1field2field31)Hello”2)World”3)(n
16、il)6)hincrby為指定的hashfield加上給定值。:6379hsetmyhashfield320(integer)1:6379hgetmyhashfield320”:6379hincrbymyhashfield3-8(integer)12:6379hgetmyhashfield312”7)hexists測試指定field是否存在。(integer)1:6379hexistsmyhashfield9(integer)08)hlen返回指定hash的field數(shù)量。:6379hl
17、enmyhash(integer)4可以看到,myhash庫中有4個field。9)hdel返回指定hash的field數(shù)量。:6379hlenmyhash(integer)4:6379hdelmyhashfield1(integer)1:6379hlenmyhash(integer)310)hkeys返回hash的所有key。:6379hkeysmyhash1)key1”2)key2”3)key3”11)hvals返回hash的所有valueo:6379hvalsmyhash1)World”2)Hell
18、o”3)12”12)hgetall獲取某個hash中全部的field及value。:6379hgetallmyhash1)key1”2)World”3)key2”4)Hello”5)key3”4.3List1)Ipush在與key對應(yīng)的list的頭部添加字符串元素。:6379Ipushmylistworld(integer)1:6379lpushmylisthello(integer)2:6379lrangemylist0-11)hello”2)World”此處先插入一個world,然后在world的頭部插入一個hello
19、。其中l(wèi)range指令用于獲取mylist的內(nèi)容。2)rpush在與key對應(yīng)的list的尾部添加字符串元素。:6379rpushmylist2hello(integer)1:6379rpushmylist2world(integer)2:6379lrangemylist20-11)hello”2)world”3)linsert在與key對應(yīng)的list的特定位置(之前或之后)添加字符串元素。:6379rpushmylist3hello(integer)1:6379rpushmylist3world(int
20、eger)2:6379linsertmylist3beforeworldthere(integer)3:6379lrangemylist30-11)hello”2)there3)world”先插入一個hello,然后在hello的尾部插入一個world,然后又在world的前面插入了there。4)lset設(shè)置list中指定下標(biāo)的元素值(從0開始):6379rpushmylist4one(integer)1:6379rpushmylist4two(integer)2:6379rpushmylist4thr
21、ee(integer)3:6379lsetmylist40fourOK:6379lsetmylist4-2fiveOK:6379lrangemylist40-111) four”12) five”13) three此處依次插入了one,two,three,然后將下標(biāo)為0的值設(shè)置為four,再將下標(biāo)為-2的值設(shè)置為fiveo5)lrem從與key對應(yīng)的list中刪除count個和value相同的元素,使用count查詢。:6379rpushmylist5hello(integer)1:6379rpushmy
22、list5hello(integer)2:6379rpushmylist5foo(integer)3:6379rpushmylist5hello(integer)4:6379lremmylist52hello(integer)2:6379lrangemylist50-11) foo”2) hello”countrpushmylist6hello(integer)1:6379rpushmylist6hello(integer)2:6379rpushmylist6foo(integer)31
23、:6379rpushmylist6hello(integer)4:6379lremmylist6-2hello(integer)2:6379lrangemylist60-11.%2hello”2.%2fbo”count=0時,刪除全部,具體代碼如下::6379rpushmylist7hello(integer)1:6379rpushmylist7hello(integer)2:6379rpushmylist7foo(integer)3:6379rpushmylist7he
24、llo(integer)4:6379lremmylist70hello(integer)2:6379lrangemylist70-11)foo”6)ltrim保留指定key值范圍內(nèi)的數(shù)據(jù)::6379rpushmylist8one(integer)1:6379rpushmylist8two(integer)2:6379rpushmylist8three(integer)3:6379rpushmylist8four(integer)4:6379ltrimmylist81-1
25、(integer)2:6379lrangemylist80-11) two”2) three3) four7)Ipop從list的頭部刪除元素,并返回刪除元素的內(nèi)容::6379Irangemylist0-11)hello”2)World”:6379lpopmylisthello”:6379lrangemylist0-11)World”8)rpop從list的尾部刪除元素,并返回刪除元素的內(nèi)容::6379lrangemylist20-11)hello”2)World”:6379rpopmy
26、list2World”:6379lrangemylist20-11)hello”9)rpoplpush從第一個list的尾部移除元素并將其添加到第二個list的頭部,最后返回被移除的元素值,整個操作是原子性的。如果第一個list為空或者不存在,則返回nil。:6379lrangemylist50-11)three2)foo”2)hello”:6379lrangemylist60-12) hello”3) foo”:6379rpoplpushmylist5mylist6hello”:6379lrangemy
27、list50-11) three2) foo”:6379lrangemylist60-11) hello”2) hello”3) fOo”10)lindex返回名稱為key的list中index位置的元素。:6379lrangemylist50-11) three2) fOo”3):6379lindexmylist501)three:6379lindexmylist514) foo5)llen返回與key對應(yīng)的list的長度。:6379llenmylist5(integer)24.4SetRedis的set是
28、string類型的無序集合,set元素最多可以包含232個元素。關(guān)于set集合類型除了基本的添加,刪除操作,其他操作還包括對集合取并集(union)、交集(intersection)、差集(difference)。1)sadd向名稱為key的set中添加元素。:6379saddmysethello(integer)1:6379saddmysetworld(integer)1:6379saddmysetworld(integer)0:6379smembersmyset1) World”2) hello”此處向myset中添加
29、了3個元素, 但由于第3個元素跟第2個元素相同, 所以第3個元素沒有添加成功。最后用smembers來查看myset中的所有元素。2)srem刪除名稱為key的set中的元素member。:6379saddmyset2one(integer)1:6379saddmyset2two(integer)1:6379saddmyset2three(integer)1:6379sremmyset2one(integer)1:6379sremmyset2four(integer)0:6379smem
30、bersmyset21) three2) tWo”此處向myset2中添加了3個元素后,再調(diào)用srem來刪除one和four,但由于元素中沒有four,所以srem命令執(zhí)行失敗。3) spop隨機返回并刪除名稱為key的set中的一個元素。:6379smembersmyset21) tWo”2) three3) 3ne”4):6379spopmyset2three5):6379smembersmyset21) tWo”2) 3ne”4)sdiff返回所有給定key與第一個key的差集。:6379smembersmyset21) t
31、Wo”2) one:6379smembersmyset31) tWo”2) three:6379sdiffmyset2myset31)one可以看出,myset2和myset3中不同的元素只是one所以只有one出現(xiàn)在查詢結(jié)果中。也可以將myset2和myset3交換順序后再查看結(jié)果。:6379sdiffmyset3myset21)three5)sdiffstore返回所有給定key與第一個key的差集,并將結(jié)果保存為另一個key。:6379smembersmyset21) two”2) 3ne”:637
32、9smembersmyset31)two”2)three:6379sdiffstoremyset4myset2myset3(integer)1:6379smembersmyset4one6)sinter返回所有給定key的交集。:6379smembersmyset21) two”2) 3ne”:6379smembersmyset31) two”2) three3):6379sintermyset2myset31)two”7)sinterstore返回所有給定key的交集,并將結(jié)果存為另一個key。127.0.
33、0.1:6379smembersmyset2127 two”128 one:6379smembersmyset31.%2two”2.%2three3.%:6379sinterstoremyset5myset2myset3(integer)11)two”8)sunion返回所有給定key的并集。:6379smembersmyset21) tWo”2) 3ne”:6379smembersmyset312) tWo”13) three14) :6379sunionmyset2myset31) tWo”2) three
34、3) one9)sunionstore返回所有給定key的并集,并將結(jié)果保存為另一個key。:6379smembersmyset21tWo”23ne”:6379smembersmyset31)1)tWo”2)three:6379sunionstoremyset6myset2myset3(integer)3:6379smembersmyset61.%2tWo”2.%2three3.%2one10)smove從第一個key對應(yīng)的set中移除member并將其添加到第二個對應(yīng)的:6379smembersmyse
35、t25tWo”63ne”:6379smembersmyset31.%2tWo”2.%2three3.%:6379smovemyset2myset7one(integer)1one:6379smembersmyset2two”可以看出myset2的成員one被移到myset7中了。scard返回名稱為key的set的元素個數(shù)。:6379scardmyset2(integer)1sismember測試member是否為名稱為key的set中的元素。:6379smembersmyset2tWo”.0.0.1:63
36、79sismembermyset2two(integer):6379sismembermyset2one(integer)0srandmember隨機返回名稱為key的set中的一個元素,但不刪除該元素。:6379smembersmyset3tWo”3ne”:6379srandmembermyset3tWo”nset中。:6379srandmembermyset3”one4.5Sortedsets和set一樣,sortedset也是string類型元素的集合,不同的是每個元素都會關(guān)聯(lián)一個double類型的scoreo1)zad
37、d向名稱為key的zset中添加元素(member),并使用score指令進行排序。如果該元素已經(jīng)存在,則更新該元素的順序。:6379zaddmyzset1one(integer)1:6379zaddmyzset2two(integer)1:6379zaddmyzset3two(integer)0:6379zrangemyzset0-1withscoresone1”two2)3”此處向myzset中添加了one和two成員,并且two被設(shè)置了2次,那么將以最后一次的設(shè)置為準(zhǔn),最后將所有元素按順序顯示出來。2)zrem刪除名
38、稱為key的zset中的元素(member)。:6379zaddmyzset0-1withscores3ne”1”two”2)3”:6379zremmyzsettwo(integer)1:6379zrangemyzset0-1withscores3ne”1”zincrby如果在名稱為key的zset中已經(jīng)存在元素(member),則該元素的score增加(increment);否則向集合中添加該元素,其score的值為increment。:6379zaddmyzset21one(integer)1:637
39、9zaddmyzset22two(integer)1:6379zincrbymyzset22one3”1):6379zrangemyzset20-1withscorestwo”2”3ne”1”這里將元素one的score從1增加了2,即增加到了3。zrank返回名稱為key的zset中member的排名(按score從小到大排序),排名以0為底,也就是說,score值最小的成員排名為0。:6379zrangemyzset30-1withscores3ne”1”two”2”three”3”five”5”:6379zrankm
40、yzset3two(integer)1zrevrank返回名稱為key的zset中member的排名(按score從大到小排序)。:6379zrangemyzset30-1withscores3ne”1”tWo”2”three”3”five”5”:6379zrevrankmyzset3two(integer)2zrevrange在名稱為key的zset中,檢索從開始到結(jié)束的所有元素,按score從大到小進行排序,再取出全部元素。:6379zrevrangemyzset30-1withscoresfive”5”three3”two”2”3ne
41、”1”zrangebyscore返回集合中score在給定區(qū)間的元素。:6379zrangemyzset30-1withscores3ne”1”two”2”three”3”five”5”:6379zrangebyscoremyzset323withscorestwo”2”three3”8)zcount返回集合中score在給定區(qū)間的數(shù)量。:6379zrangemyzset30-1withscoresOne”1”tWo”2”three”3”five”5”:6379zcountmyzset323(integer)2zcard返回集
42、合中元素的個數(shù)。:6379zrangemyzset30-1withscores3ne”1”tWo”2”three”3”five”5”:6379zcardmyzset3(integer)4zscore返回給定元素對應(yīng)的scoreo:6379zrangemyzset30-1withscores3ne”1”two”2”three”3”five”5”:6379zscoremyzset3two2”zremrangebyrank刪除集合中排名在給定區(qū)間的元素。:6379zrangemyzset30-1withscor
43、esC 3ne”C 1”C two”C 2”C three”C 3”C five”C 5”.0.1:6379zremrangebyrankmyzset333(integer)1.0.1:6379zrangemyzset30-1withscoresOne”1”tWo”2”three”3”zremrangebyscore刪除集合中排名在給定區(qū)間的元素。:6379zrangemyzset30-1withscores3ne”1”two2”three”3”:6379zremrangebyscoremyzset312(integer)1:6379zra
44、ngemyzset30-1withscores)three)3”持久化通常Redis將數(shù)據(jù)存儲在內(nèi)存中或虛擬內(nèi)存中,它是通過以下兩種方式實現(xiàn)對數(shù)據(jù)的持久化。在實際運營中,注意備份持久化文件以防止數(shù)據(jù)丟失??煺辗绞剑海J(rèn)持久化方式)這種方式就是將內(nèi)存中數(shù)據(jù)以快照的方式寫入到二進制文件中,默認(rèn)的文件名為dump.rdb??蛻舳艘部梢允褂胹ave或者bgsave命令通知redis做一次快照持久化。save操作是在主線程中保存快照的,由于redis是用一個主線程來處理所有客戶端的請求,這種方式會阻塞所有客戶端請求。所以不推薦使用。另一點需要注意的是,每次快照持久化都是將內(nèi)存數(shù)據(jù)完整寫入到磁盤一次,并
45、不是增量的只同步增量數(shù)據(jù)。如果數(shù)據(jù)量大的話,寫操作會比較多,必然會引起大量的磁盤IO操作,可能會嚴(yán)重影響性能。注意:由于快照方式是在一定間隔時間做一次的,所以如果redis意外當(dāng)機的話,就會丟失最后一次快照后的所有數(shù)據(jù)修改。?數(shù)據(jù)快照配置:save9001save30010save6010000以上在redis.conf中的配置指出在多長時間內(nèi),有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件,這個可以多個條件配合。上面的含義是900秒后有一個key發(fā)生改變就執(zhí)行save,300秒后有10個key發(fā)生改變執(zhí)行save,60秒有10000個key發(fā)生改變執(zhí)行save。日志追加方式這種方式redis會將每
46、一個收到的寫命令都通過write函數(shù)追加到文件中(默認(rèn)appendonly.aof)。當(dāng)redis重啟時會通過重新執(zhí)行文件中保存的寫命令來在內(nèi)存中重建整個數(shù)據(jù)庫的內(nèi)容。當(dāng)然由于操作系統(tǒng)會在內(nèi)核中緩存write做的修改,所以可能不是立即寫到磁盤上。這樣的持久化還是有可能會丟失部分修改。不過我們可以通過配置文件告訴redis我們想要通過fsync函數(shù)強制操作系統(tǒng)寫入到磁盤的時機。有三種方式如下(默認(rèn)是:每秒fsync一次)appendonlyyes/啟用日志追加持久化方式#appendfsyncalways/每次收到寫命令就立即強制寫入磁盤,最慢的,但是保證完全的持久化,不推薦使用appendfs
47、ynceverysec/每秒鐘強制寫入磁盤一次,在性能和持久化方面做了很好的折中,推薦#appendfsyncno/完全依賴操作系統(tǒng),性能最好,持久化沒保證日志追加方式同時帶來了另一個問題。持久化文件會變的越來越大。例如我們調(diào)用incrtest命令100次,文件中必須保存全部100條命令,其實有99條都是多余的。因為要恢復(fù)數(shù)據(jù)庫狀態(tài)其實文件中保存一條settest100就夠了。為了壓縮這種持久化方式的日志文件。redis提供了bgrewriteaof命令。收到此命令redis將使用與快照類似的方式將內(nèi)存中的數(shù)據(jù)以命令的方式保存到臨時文件中,最后替換原來的持久化日志文件。集群Redis集群是一個
48、可以在多個Redis節(jié)點之間進行數(shù)據(jù)共享的設(shè)施,Redis集群使用數(shù)據(jù)分片(sharding)而非一致性哈希(consistencyhashing)來實現(xiàn):一個Redis集群包含16384個哈希槽(hashslot),數(shù)據(jù)庫中的每個鍵都屬于這16384個哈希槽的其中一個,集群提供了以下兩個好處:?將數(shù)據(jù)自動切分(split)到多個節(jié)點的能力。?當(dāng)集群中的一部分節(jié)點失效或者無法進行通訊時,仍然可以繼續(xù)處理命令請求的能力。卜面就來著手創(chuàng)建一個Redis集群。集群配置以下是一個包含了最少選項的集群配置文件示例:port7000cluster-enabledyescluster-config-file
49、nodes.confcluster-node-timeout5000appendonlyyes文件中的cluster-enabled選項用于打開實例的集群模式,而cluster-conf-file選項則設(shè)定了保存節(jié)點配置文件的路徑,默認(rèn)值為nodes.conf。節(jié)點配置文件無須人為修改,它由Redis集群在啟動時創(chuàng)建,并在有需要時自動進行更新。創(chuàng)建集群實例首先進入一個新目錄,并創(chuàng)建六個以端口號為名字的子目錄,稍后我們在將每個目錄中運行一個Redis實例:mkdircluster-testcdcluster-testmkdir700070017002700370047005?在文彳夾7000至7
50、005中,各創(chuàng)建一個redis.conf文件,文件的內(nèi)容可以使用上面的示例配置文件,但記得將配置中的端口號改為與文件夾名字相同的號碼。?復(fù)制redis-server文件到cluster-test文件夾,然后使用類似以下命令,在每個標(biāo)簽頁中打開一個實例:cd7000./redis-server./redis.conf至此,6個集群實例已全部啟動,如下圖所示:LrootscrianceslESJ*PS-ef1grep redisroot6?111009:1900:00:00/redie-server*7000CclueterZIroot714B1009:2000:00:00.*/redis-ser
51、ver*:7001clusterJroot71741009:2000:00:00/redis-server*:7002cLusterZIroot719310O9:2O700:00:00+,/redis-server*:7003CcLusterZIroot72331009:21700;00;0011Zredis-seirver*;7004CcLusterJroot72451009:21700:00:00bt/red!s-server*;7005CcLusterJ配置實例通訊現(xiàn)在我們已經(jīng)有了6個Redis實例,并以RedisCluster的方式運行著,但并沒有自動構(gòu)建集群,彼此都還是獨立的節(jié)點,驗
52、證如下:./redis-cli-p7000clusterinfocluster_state:failcluster_slots_assigned:0cluster_slots_ok:0cluster_slots_pfail:0cluster_slots_fail:0cluster_size:0cluster_current_epoch:0cluster_my_epoch:0cluster_stats_messages_sent:0cluster_stats_messages_received:0接下來我們來創(chuàng)建集群,讓6個實例互相通訊:./redis-trib.rbcreate-replica
53、s1:7000:7001:7002:7003:7004:7005/usr/local/rvm/rubies/ruby-2.0.0-p451/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:inrequire:cannotloadsuchfile-redis(LoadError)from/usr/local/rvm/rubies/ruby-2.0.0-p451/lib/ruby/site_ruby/2.0.0/
54、rubygems/core_ext/kernel_require.rb:55:inrequirefrom./redis-3.0.0/src/redis-trib.rb:25:inredis-trib位于Redis源碼的src文件夾中,它是一個Ruby程序,這個程序通過向?qū)嵗l(fā)送特殊命令來完成創(chuàng)建集群,從上圖報錯發(fā)現(xiàn),操作系統(tǒng)沒有安裝gem-redis,所以需要執(zhí)行以下命令完成安裝:geminstallredis安裝信息:Fetching:redis-3.2.1.gem(100%)Successfullyinstalledredis-3.2.1Parsingdocumentationforred
55、is-3.2.1Installingridocumentationforredis-3.2.11geminstalled之后重新執(zhí)行以下命令,便可依提示完成集群建設(shè):./redis-trib.rbcreate-replicas1:7000:7001:7002:7003:7004:7005CreatingclusterConnectingtonode:7000:OKConnectingtonode:7001:OKConnectingtonode127.0
56、.0.1:7002:OKConnectingtonode:7003:OKConnectingtonode:7004:OKConnectingtonode:7005:OKPerforminghashslotsallocationon6nodes.Using3masters::7000:7001:7002Addingreplica:7003to:7000Addingreplica:7004to:7001Addingrep
57、lica:7005to:7002M:409f3c36392405dab1a98863aca38b1a70a8d9b4:7000slots:0-5460(5461slots)masterM:0de19d6c1054b57faad32c08c64e00455c26afde:7001slots:5461-10922(5462slots)masterM:4b3a15c90158205b386707049a8806bce00be24c:7002slots:10923-16383(5461slots)masterS:e96aec079249c8414bb13e0bba5481382170b80c:7003replicates409f3c36392405dab1a98863aca38b1a70a8d9b4S:8079cfa03127743d095b3dfdbd87c417633a7
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度跨境電商運營個人勞務(wù)用工合同范本4篇
- 2025年度新型材料門窗研發(fā)與安裝合同3篇
- 2025年度個人房屋建設(shè)工期延誤賠償合同模板4篇
- 二零二五年度個人消費貸款合同規(guī)范文本4篇
- 工程進水排水承包合同(2篇)
- 二零二五版鋼筋防腐處理及采購合同3篇
- 中國民用機場行業(yè)展望2025年1月 -中誠信
- 二零二五版項目負(fù)責(zé)人任期責(zé)任與權(quán)益合同3篇
- 2025年鐵路貨物安全運輸全面保障合同3篇
- 呼叫中心述職報告2000字【三篇】
- 2025年神經(jīng)外科護理工作計劃例文(2篇)
- 2025年湖北省武漢市東湖高新區(qū)管委會招聘工作人員歷年高頻重點提升(共500題)附帶答案詳解
- 初中英語聽力高頻詞
- 一年級期末數(shù)學(xué)家長會課件
- 2024年社區(qū)警務(wù)規(guī)范考試題庫
- 通信工程安全知識培訓(xùn)
- 2022年高考真題-政治(天津卷) 含答案
- 2024年度乙方提供物流配送服務(wù)合同標(biāo)的為800萬元人民幣
- 個體診所醫(yī)生述職報告3篇
- 2024年事業(yè)單位招聘考試公共基礎(chǔ)知識試題庫及答案(共316題)
- 杭州宋韻文化課程設(shè)計
評論
0/150
提交評論