




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Redis介NoSQL,即Not-OnlySQL,泛指非關(guān)系型的數(shù)據(jù)庫。它是為了解決高并發(fā)、高可用、高可 NoSql典型應(yīng)用:內(nèi)容緩存,主要用于處理大量數(shù)據(jù)的高負載。數(shù)據(jù)模型:一系列鍵值對劣勢:的數(shù)據(jù)缺少結(jié)構(gòu)列數(shù)據(jù)相關(guān)產(chǎn)品:CassandraHBase典型應(yīng)用:Web應(yīng)用(與Key-Value類似,Value是結(jié)構(gòu)化的)數(shù)據(jù)模型:一系列鍵值對RedisRedisC語言開發(fā)的一個開源的高性能鍵值對(key-value)數(shù)據(jù)庫。它通過提供多種鍵值數(shù)據(jù)類型來適應(yīng)不同場景下的需求,目前為止Redis支持的鍵值數(shù)據(jù)類型如下:Redis2008年,意大利的一家Merzia推出了一款基于MySQL的實時統(tǒng)計系統(tǒng)LLOOGGSalvatoreSanfilippoMySQL的性能感到失RedisSalvatoreSanfilippoRedisLLOOGG這一款產(chǎn)品,而是希望的人使用它,于是在同一年SalvatoreSanfilippo將Redis開源發(fā)布,并開始和RedisPieterNoordhuisRedis的開發(fā),直到今天。SalvatoreSanfilippo自己也沒有想到,短短的幾年時間,Redis就擁有了龐大的用戶群體。HackerNews在2012年發(fā)布了一份數(shù)據(jù)庫的使用情況,結(jié)果顯示有近12%的公司在使用Redis。國內(nèi)如、街旁網(wǎng)、知乎網(wǎng),國外如、StackOverflow、Flickr等都Redis的用戶。VMware2010RedisSalvatoreSanfilippoPieterNoordhuis也35VMwareRedis。Redis聊天室的好友列表應(yīng)用榜Redis單機版安裝配redisRedisRedis是C語言開發(fā),建議在linux上運行,本使用Centos6.4作為安裝環(huán)境Redis第一步:在VMware中安裝CentOS(參考Linux中的安裝虛擬機[root@linux02redis-3.0.0]#yuminstallgcc-[root@linux02redis-3.0.0]#yuminstallgcc-[root@linux02~]#tar-zxfredis-[root@linux02~]#tar-zxfredis-[root@linux02redis-3.0.0]#第四步:編譯Redis源碼,進入redis- [root@linux02redis-3.0.0]#[root@linux02redis-3.0.0]#makeinstall[root@linux02redis-3.0.0]#makeinstallRedis前端啟動[root@linux02bin]#./redis-[root@linux02bin]#./redis-啟動缺點:客戶端窗口關(guān)閉則redis-server程序結(jié)束,不推薦使用此方法后端啟動[root@linux02redis-3.0.0]#cpredis.conf[root@linux02redis-3.0.0]#cpredis.conf[root@redis01bin2]#vimredis.confdaemonize[root@redis01bin2]#vim[root@linux02[root@linux02bin]#./redis-server[root@localhost-0723bin]#kill[root@localhost-0723bin]#kill[root@localhost-0723[root@localhost-0723bin]#./redis-cliRedis集群版安裝配redis-cluster架構(gòu)細節(jié) 客戶端與redis節(jié)點直連,proxy層.客戶端不需要連接集群所有節(jié)點,連接集群redis-cluster把所有的物理節(jié)點到[0-16383]slot上,cluster負Redis16384Rediskey-valuerediskeycrc1616384key都會對應(yīng)一個在0-16383之間的哈希槽,redis會根據(jù)節(jié)點數(shù)量大致均等的將希槽到不同的節(jié)(cluster-node-timeout),master節(jié)點掛掉.master掛掉,masterslavefail狀態(tài)。也可以理解成集群的[0-16383]slot不完全時進入fail狀態(tài)。Ruby[root@redis01bin]#yuminstall[root@redis01[root@redis01bin]#yuminstall[root@redis01bin]#yuminstallredis-3.0.0.gemLinuxrubyredis的接口程序redis-[root@redis01src]#cpredis-trib.rb/usr/local/redis0707/-[root@linux02local]#geminstall[root@redis01src]#cpredis-trib.rb/usr/local/redis0707/-[root@linux02local]#geminstallredis-集群的搭建過程Redis集群最少需要三臺主服務(wù)器,三臺從服務(wù)器。端分別為:7001~70067001redis.confport7001注意:創(chuàng)建實例,即拷貝單機版安裝時,生成的 ,為 第三步:7001,創(chuàng)建7002~7006實例,注意端口修改。 -- 29:700229:700329:7004>>>CreatingConnectingtonode29:7001:OKConnectingtonode29:7002:OKConnectingtonode29:7003:OKConnectingtonode29:7004:OKConnectingtonode29:7005:OKConnectingtonode29:7006:>>>Performinghashslotsallocationon6nodes...Using3masters:Addingreplica29:7004toAddingreplica29:7005toAddingreplica29:7006toslots:0-5460(5461slots)slots:5461-10922(5462slots)M:93f73d2424a796657948c660928b71edd3db881fslots:10923-16383(5461slots)S:f79802d3da6b58ef6f9f30c903db7b2f79664e61replicatesS:0bc78702413eb88eb6d7982833a6e040c6af05bereplicatesS:4170a68ba6b7757e914056e2857bb84c5e10950ereplicates93f73d2424a796657948c660928b71edd3db881fCanIsettheaboveconfiguration?(type'yes'toaccept):yes>>>Nodesconfiguration>>>Assignadifferentconfigepochtoeach>>>SendingCLUSTERMEETmessagestojointheclusterWaitingfortheclustertojoin....>>>PerformingClusterCheck(usingnodeslots:0-5460(5461slots)slots:5461-10922(5462slots)M:93f73d2424a796657948c660928b71edd3db881fslots:10923-16383(5461slots)slots:(0slots)replicatesM:0bc78702413eb88eb6d7982833a6e040c6af05beslots:slots:(0slots)replicatesslots:(0slots)replicates93f73d2424a796657948c660928b71edd3db881f[OK]Allnodesagreeaboutslotsconfiguration.>>>Checkforopen>>>Checkslotscoverage...[OK]All16384slotscovered.[root@localhost-0723連接集群命令:./redis-cli–h–p7001[root@localhost-0723redis]#./redis-cli-p[root@localhost-0723redis]#./redis-cli-p7006-c:7006>setkey1123->Redirectedtoslot[9189]locatedat:7002查看集群令:7003>clusterinfo:7003>clusterinfo:7003>:7003>cluster7a12bc730ddc939c84a156f276c446c28acf798c:7002master-01443601739754connectedconnected5461-10923-d8f6a0e3192c905f0aad411946f3ef9305350420:7001master-01443601741267connected0- 93f73d2424a796657948c660928b71edd3db881f014436017392506 d8f6a0e3192c905f0aad411946f3ef9305350420014436017422774 7a12bc730ddc939c84a156f276c446c28acf798c014436017402595節(jié)點()添加主節(jié)點7007執(zhí)行命令:./redis-trib.rbadd-node:7007hashredis16384個槽,集群中的每個結(jié)點分配自已槽,通過查看集群結(jié)點可以看到槽占7007[root@redis01redis0707]#[root@redis01redis0707]#./redis-trib.rbreshardPS7007分配槽,通過clusternodes7007id添加從節(jié)點700870087007命令:./redis-trib.rbadd-node--slave--master-ididipip和./redis-trib.rb./redis-trib.rbadd-node--slave--master-id:7008 id[ERR]NodeXXXXXXisnotempty.Eitherthenode[ERR]NodeXXXXXXisnotempty.Eitherthenodealreadyknowsothernodes(checkCLUSTERNODES)orcontainssomekeyindatabase70087007刪除結(jié)點命令:./redis-trib.rbdel-node:7005[ERR]Node:7005isnotempty!Resharddataawayandtry需要將該結(jié)點占用的hash槽分配出去(參考hash槽重新分配章節(jié)Jedis[root@localhost-0723bin]#serviceiptables[root@localhost-0723bin]#serviceiptables-AINPUT-picmp-j-AINPUT-ilo-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport22-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport8080-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport6379-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport6380-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7001-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7002-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7003-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7004-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7005-j-AINPUT-mstate--stateNEW-mtcp-ptcp--dport7006-j-AINPUT-jREJECT--reject-withicmp-host--AFORWARD-jREJECT--reject-withicmp-host-prohibited~"/etc/sysconfig/iptables22L,1079C[root@localhost-0723bin]#serviceiptables[root@localhost-0723代碼實現(xiàn)JedisClusterredispublicvoidtestJedisCluster()throwsException//創(chuàng)建一連接,JedisCluster對象,在系統(tǒng)中是單例存在Set<HostAndPort>nodes=newHashSet<>();nodes.add(newHostAndPort("29",7006));JedisClustercluster=newJedisCluster(nodes);//JedisCluster對象中的方法,方法和rediscluster.set("cluster-test","myjedisclustertest");Stringresult=cluster.get("cluster-test");}<!--<!--<beanid="jedisPoolConfig"<!--<propertyname="maxTotal"value="30"<!--<propertyname="maxIdle"value="10"<!--<!--釋放連接的掃描間隔(毫秒)<!--<!--連接空閑多久后釋放,當(dāng)空閑時間>><!--獲取連接時的最大等待毫秒數(shù),小于零:阻塞不確定的時間,默認-1<!--在獲取連接的時候檢查有效性,默認false<propertyname="testOnBorrow"value="true"<!--在空閑時檢查有效性,默認false<propertyname="testWhileIdle"value="true"<!--連接耗盡時是否阻塞false報異常,ture阻塞直到超時,默認true<propertyname="blockWhenExhausted"value="false"redis<beanid="jedisCluster"<constructor-arg<bean<bean<bean<bean<bean<beanprivateprivateApplicationContextapplicationContext;publicvoidinit()applicationContext=newClassPathXmlApplicationContext(}redis集群publicvoidtestJedisCluster()JedisClusterjedisCluster=(JedisCluster)jedisCluster.set("name","zhangsan");Stringvalue=jedisCluster.get("name");}Redis客戶Redis[root@localhost-0723[root@localhost-0723bin]#./redis-cli-h-p-h:redisip-p:redis實例的端[root@localhost-0723[root@localhost-0723bin]#./redis-圖形界面客戶端(了解)連接超時解決連接redis服務(wù),需要關(guān)閉或者修改配置。[root@redis01bin]#vim 的那一行的末尾,然后點擊鍵盤yyp[root@redis01bin]#vim[root@localhost-0723[root@localhost-0723redis-3.0.0]#serviceiptablesrestart iptablesACCEPT:filter 規(guī)則[確定切換數(shù)據(jù)庫使用命令:select數(shù)據(jù)庫例如:select1JavaJedisRedis不僅使用命令來操作,而且可以使用程序客戶端操作?,F(xiàn)在基本上主流的語言都有客java、C、C#、C++、php、Node.js、Go等。Jedis同樣也是托管在上,地址: jar單實例連接publicvoidtestJedis()//JedisJedisjedis=newJedis("",//redis oworld,thisisjedis//redisStringresult=}連接池連接publicvoidtestJedisPool()JedisPooljedisPool=newJedisPool("",Jedisjedis=jedisPool.getResource();Stringresult=jedis.get("mytest");}springjar<beans""""""<!--<beanid="jedisPoolConfig"<!--<propertyname="maxTotal"value="30"<!--<propertyname="maxIdle"value="10"<!--<!--釋放連接的掃描間隔(毫秒)<!--<!--<!--連接空閑多久后釋放,當(dāng)空閑時間>該值且空閑連接>最大空閑連接數(shù)時直接釋放--><!--獲取連接時的最大等待毫秒數(shù),小于零:阻塞不確定的時間,默認-1<propertyname="maxWaitMillis"value="1500"<!--在獲取連接的時候檢查有效性,默認false<propertyname="testOnBorrow"value="false"<!--在空閑時檢查有效性,默認false<propertyname="testWhileIdle"value="true"<!--連接耗盡時是否阻塞false報異常,ture阻塞直到超時,默認true<propertyname="blockWhenExhausted"value="false"redis<beanid="jedisPool"class="redis.clients.jedis.JedisPool"<constructor-argname="port"value="6379"publicpublicvoidtestJedisPool()JedisPoolpool=(JedisPool)applicationContext.getBean("jedisPool");Jedisjedis=null;tryjedis=jedis.set("name",Stringname=jedis.get("name");}catch(Exceptionex){}finallyif(jedis!=null)//}}}Redis數(shù)據(jù)類Redis中數(shù)據(jù)是通過key-value格式的,對于value的類型有以下幾種Hash注意:注意:在redis String命令賦:6379>settest:6379>settest取:6379>get:6379>get:6379>getsets2:6379>getsets2:6379>get刪:6379>del:6379>del(integer)數(shù)值增:6379>incr(integer):6379>incr(integer):6379>incr(integer):6379>incr(integer):6379>incrbynum:6379>incrbynum(integer):6379>incrbynum(integer):6379>incrbynum(integer):6379>decr(integer):6379>decr(integer):6379>decr(integer):6379>decr(integer):6379>decr(integer):6379>decr(integer):6379>decrbynum(integer)(integer):6379>decrbynum(integer)-其它命令(向尾部追加于SETkeyvalue。返回值是追加后字符串的總長度。:6379>setstr :6379>append:6379>setstr :6379>appendstr"world!"(integer)12:6379>get o:6379>strlen(integer):6379>strlen(integer):6379>setstr :6379>strlen(integer)同時設(shè)置/MSETkeyvalue[keyvalue…]MGETkey[key…]:6379>:6379>msetk1v1k2v2k3v3:6379>getk1:6379>mgetk1應(yīng)用場景之自增主鍵定義商品key:items:id:7003>INCRitems:id(integer):7003>INCR(integer)Hashstring格式到Redis中,的過程如下agehash命令賦HSET命令不區(qū)分和更新操作,當(dāng)執(zhí)行操作時HSET命令返回1,當(dāng)執(zhí)行更新0。:6379>hset:6379>hsetuserusername(integer):6379>hmsetuserage20username:6379>hmsetuserage20username:6379>hsetnxuserage30 userage:6379>hsetnxuserage30 userageage30,否則(integer)取語法:HGETkeyfield:6379>:6379>hgetuser:6379>hmgetuserage1)2):6379>hmgetuserage1)2):6379>hgetall:6379>hgetall刪除字:6379>hdel:6379>hdeluserage(integer)1:6379>hdeluseragename(integer)0:6379>hdeluserage(integer)增加數(shù):6379>hincrbyuserage:6379>hincrbyuserage(integer):6379>hgetuserage將用戶 加其它命令(判斷字段是否存:6379>hexistsuser:6379>hexistsuser(integer)userage:6379hexistsusernameusername(integer):6379>hmsetuser:6379>hmsetuserage20namelisi:6379>hkeys:6379>hvals1)2)獲取字段數(shù):6379>hlen:6379>hlen(integer)應(yīng)用之商品信息ID1001Rediskey:7003>HMSET:7003>HMSETitems:1001id3nameappleprice:7003>:7003>HGETitems:1001idListArrayListLinkedListArrayList使用數(shù)組方式數(shù)據(jù)所以根據(jù)索引查詢數(shù)據(jù)速度快而新增或者刪除元素LinkedList使向鏈表方式數(shù)據(jù),每個元素都記錄前后元素的指針,所以、list列表類型是使向鏈表(doublelinkedlist)實現(xiàn)的,所以向列表兩端添加元素的10條記錄也是極快的。命令:6379>lpushlist:112:6379>lpushlist:112(integer):6379>rpushlist:145:6379>rpushlist:145(integer)查看列:6379>lrangelist:10:6379>lrangelist:101)2)3)LPOP命令從列表左邊彈出一個元素,會分兩步完成::6379>lpop:6379>lpop:6379>rpop:6379>llen:6379>llen(integer)其它命令(LREMcountvaluecount>0LREMcount<0LREMcount=0LREM刪除所有值為value的元素。語法:LREMkeycountvalue獲得/:6379>lindex:6379>lindexl:list:6379>lsetl:list22:6379>lsetl:list22:6379>lrangel:list0-1)2)3)4):6379>lrangel:list0-1):6379>lrangel:list0-1)2)3)4):6379>ltriml:list02:6379>lrangel:list0-1)2)3)向列表中元pivotBEFORE還是AFTER來決定將value到該元素的前面還是后面。:6379>lrangelist0-1):6379>lrangelist0-1)2)3):6379>linsertlistafter3(integer):6379>lrangelist0-1)2)3)4)將元素從一個列表轉(zhuǎn)移到另一個列表語法:RPOPLPUSHsource:6379>:6379>rpoplpushlistnewlist:6379>lrangenewlist0-1):6379>lrangelist0-1)2)3)應(yīng)用之商品評論列表:7001>:7001>ment:1001'{"id":1,"name商品不錯,很好!!商 Setset類型的Redis是使用值為空的散列表實現(xiàn),所有這些操作的時間復(fù)雜度都為0(1)。命令增加/:6379>saddsetab:6379>saddsetabc(integer)3:6379>saddset(integer):6379>sremsetc(integer):6379>sremsetc(integer):6379>smembers:6379>smembers:6379>sismemberseta(integer)1:6379>sismemberseta(integer)1:6379>sismemberset(integer)運算命令A(yù)-AB語法:SDIFFkeykey:6379>:6379>saddsetA12(integer):6379>saddsetB23(integer):6379>sdiffsetA1):6379>sdiffsetB1)集合的交集運算AAB:6379>sintersetA1):6379>sintersetA1)2)集合的并集運算AAB:6379>sunionsetA1):6379>sunionsetA1)2)3)4):6379>smembers:6379>smembers1)2)3):6379>scard(integer)從集合出一個元:6379>spopSPOP:6379>spopSortedSetsortedset1、列表類型是通過鏈表實現(xiàn)的,獲取靠近兩端的數(shù)據(jù)速度極快,而當(dāng)元素增多后,中命令增加元:6379>zadd(integer):6379>zadd(integer):6379>zadd(integer):6379>zadd(integer)80zhangsan89lisi9497獲得在某個范圍的元素列startstop之間的所有元素(包含兩端的元:6379>zrange0語法:ZRANGE:6379>zrange0startstop之間的所有元素(包含兩端的元:6379>zrevrange"lisi:6379>zrevrange"lisi"zhangsan0:6379>zrange:6379>zrange01:6379>zscore語法::6379>zscore刪除元key中的一個或多個成員,不存在的成員將被忽略。key存在但不是有序集類型時,返回一個錯誤。:6379>zrem(integer)語法:ZREM:6379>zrem(integer)其它命令(獲得指定分數(shù)范圍的元:6379>ZRANGEBYSCORE:6379>ZRANGEBYSCORE9097:6379>ZRANGEBYSCORE:6379>ZRANGEBYSCORE909770100limit1:6379>ZINCRBY4語法:6379>ZINCRBY4:6379>ZCARD(integer):6379>ZCARD(integer):6379>ZCOUNT(integer)80:6379>ZCOUNT(integer)80按照范圍刪除元:6379>ZREMRANGEBYRANK(integer)0:6379>ZREMRANGEBYRANK(integer)0:6379>ZRANGE -11):6379>zadd(integer)84:6379>zadd(integer)84 80(integer):6379>ZRANK(integer):6379>ZRANK(integer):6379>ZREVRANK(integer):6379>ZREVRANK(integer)應(yīng)用之商品銷售榜,Key:7007>ZADDitems:sellsort9100110商品1001的銷量是:7007>ZADDitems:sellsort9100110:7001>ZINCRBYitems:sellsort1商:7001>ZINCRBYitems:sellsort1:7001>ZRANGEitems:sellsort:7001>ZRANGEitems:se
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)科課程建設(shè)與調(diào)整方案計劃
- 戰(zhàn)略執(zhí)行中的障礙與解決方案計劃
- 七年級必須收藏:名著《西游記》每回檢測題(81至85回)
- 音樂鑒賞課如何領(lǐng)略古典音樂的韻味
- 項目進展的周期性匯報模式探索
- 質(zhì)量控制方法論班組的實踐與探索
- 軟件著作權(quán)保護在企業(yè)發(fā)展中的作用與價值
- 金融投資中的財務(wù)分析藝術(shù)
- 四年級科學(xué)上冊13我們的地球教案1冀教版
- 高中語文情感美文當(dāng)年情
- DeepSeek科普學(xué)習(xí)解讀
- 第一單元第2課《生活之美》課件-七年級美術(shù)下冊(人教版)
- 2025年七下道德與法治教材習(xí)題答案
- 危險化學(xué)品目錄(2024版)
- 人教版八年級數(shù)學(xué)第二學(xué)期教學(xué)計劃+教學(xué)進度表
- 玉米收割機的設(shè)計(機械CAD圖紙)
- 金屬補償器計算大全
- 國際部SOP手冊2014修改版(2.0版)
- 凈菜配送標準
- 水工環(huán)地質(zhì)調(diào)查技術(shù)標準手冊
- 基本力學(xué)性能-鋼筋混凝土原理_過鎮(zhèn)海
評論
0/150
提交評論