版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Redis實(shí)Java緩存機(jī)Java要實(shí)現(xiàn)java緩存有很多種方式,最簡單的無非就是staticHashMap,這個(gè)顯然是基于內(nèi)存緩存,一個(gè)map這樣很容易就導(dǎo)致內(nèi)存急劇上升周期無法控制可以采用SoftReferenceWeakReferencePhantomReference這三種對象來執(zhí)(看了Ibatis的緩存機(jī)制才發(fā)現(xiàn)JDK居然還提供了PhantomReferenceJVM,JVMOutOfMemoryError異常。Oscache,Ehcache,Jcache,JbosscacheOsCacheEhCache區(qū)Oscache:頁面級緩存(網(wǎng)上強(qiáng)調(diào)最多的東西),Oscacheapplication兩種。EhCache:Hibernate,DAO(Acegi),WebNoSQL介NoSQLNotOnlySQLSQL"的意思,泛指非關(guān)系型的數(shù)據(jù)庫。強(qiáng)調(diào)Key-ValueStores和文檔數(shù)據(jù)庫的優(yōu)點(diǎn),而不是單純的RDBMS。NoSQLRedis、mongodbMembase、RedisMembase區(qū)RedisMemcache不支持?jǐn)?shù)據(jù)的之久RedissetlisetMemcache支持簡單數(shù)據(jù)類型,需要客戶端自己處理對Redis簡RedisBSDkey-valueRedis與其他key-valueRedisRedismaster-slaveRedis應(yīng)用場主要能夠體現(xiàn)解決數(shù)據(jù)庫的壓力例如:時(shí)間有效期、session共享解決方Redis優(yōu)Redis110000s81000/sRedisStrings,Lists,Hashes,SetsOrderedSetsRedisRedisRedispublish/subscribe,通知,key過期等等特性。Redis與其他key-value有什么不同徑。RedisRedis運(yùn)行在內(nèi)存中但是可以持久化到磁盤,所以在對不同數(shù)據(jù)集進(jìn)行高速讀寫時(shí)需衡內(nèi)存,因是緊湊的以追加的方式產(chǎn)生的,因?yàn)樗麄儾⒉恍枰M(jìn)行隨機(jī)。Redis安windows安裝新建start.bat批處理文件、內(nèi)容:redis- start.bat修改#requirepassfoobared修改為requirepass注意:修改的時(shí)候前面不要加空linuxRedis的是:(這里的是Linux版在windows系統(tǒng)中好Redis的源碼包。通過WinSCP工具,將Redis的源碼windows上傳到Linux系統(tǒng)的這/opt/redis(即 cdredis-2.6.17 (一般來說,解壓 rpm-qgcc查看gcc是否安裝)(利用yum安裝gcc yum-yinstallgcc(makeclean清除臨時(shí)文件。之后,找到出錯(cuò)的原因,解決問題后再來重新安裝。)進(jìn)入到 cdmake cdmkdir-p/usr/local/redis/binmkdir-p/usr/local/redis/etccd/lamp/redis-2.6.17cp./redis.conf/usr/local/redis/etccdsrccpmkreleasehdr.shredis-benarkredis-check-aofredis-check-dumpredis-cliredis-serverredis-sentinel/usr/local/redis/binlinux6379/etc/sysconfig/iptables文件:vi加入內(nèi)容并保存:-ARH-Firewall-1-INPUTmstatestateNEWmtcpp–dport6379-j重啟服務(wù):/etc/init.d/iptables查看端口是否開放:/sbin/iptablesL比較重要的3個(gè)可執(zhí)行文件redis-server:Redis服務(wù)器程Redis的啟動命令/usr/local/redis/bin/redis-或cd./redis-server 為redis-server指定配置redis.conf文daemonizeyes---修改為yes requirepass123456----注釋取消掉設(shè)置賬號psaux|grep'6379' ---查詢端口kill159886---kill99886---serviceiptablesstop停止redis命令連接方./redis-cli-h-p6379-a"123456" ---redis使用賬號連接結(jié)果表示成功redis-clishutdownkillredis關(guān)閉Redis客戶端連接方Redis的基本數(shù)據(jù)類字符串類型 redis:6379>SETmykey"redis"redis:6379>GET在上面的例子中,SET和GET是redis中令,而mykey是鍵的名稱RedisRedisRedis字符串命令的redis:6379>COMMAND SS示redisredis:6379>SETmykey"redis"redis:6379>GETS在上面的例子中,SETGETredis令,而mykeyRedis編命描述說1SETkey2GET3GETRANGEkeystart獲取在鍵上的字符串的子字符串4GETSETkey5GETBITkey返回在鍵處的字符串值中偏移處的位值6MGETkey17SETBITkeyoffset編命描述說8SETEXkeyseconds9SETNXkeySETRANGEkeyoffsetSTRLEN獲取在鍵中的值的長MSETkeyvalue[keyvalueMSETNXkeyvalue[keyvaluePSETEXkeymillisecondsINCRINCRBYkeyINCRBYFLOATkeyDECRDECRBYkeyAPPENDkey列表類型Redis(左邊)一個(gè)列表最多可以包含232-1個(gè)元素 ,每個(gè)列表超過40億個(gè)元素)redisredis:6379>LPUSHrunoobkeyredis:6379>LPUSHrunoobkeyredis:6379>LPUSHrunoobkeyredis:6379>LRANGErunoobkey0Redis1命令BLPOPkey1[key2]2BRPOPkey1[key2]3BRPOPLPUSHsourcedestination從列表出一個(gè)值,將彈出的元素插入到另外一個(gè)列表中并返回它;如果列表沒有元素會阻塞列表直到等4LINDEXkey5LINSERTkeyBEFORE|AFTERpivot6LLEN7LPOP8LPUSHkeyvalue19LPUSHXkeyLRANGEkeystartLREMkeycountLSETkeyindexLTRIMkeystartRPOPRPOPLPUSHsourceRPUSHkeyvalue1RPUSHXkeyRedis集合Redis中集合是通過哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是O(1)。集合中最大的成員數(shù)為232-1( ,每個(gè)集合可40多億個(gè)成員)。redis:6379>redis:6379>SADDrunoobkeyredis:6379>SADDrunoobkeyredis:6379>SADDrunoobkeyredis:6379>SADDrunoobkeyredis:6379>SMEMBERSSADDrunoobkeyRedis集合命Redis命令1SADDkeymember12SCARD3SDIFFkey14SDIFFSTOREdestinationkey1返回給定所有集合的差集并在destination5SINTERkey16SINTERSTOREdestinationkey1返回給定所有集合的交集并在destination7SISMEMBERkeymemberkey8SMEMBERS9SMOVEsourcedestinationmembersourcedestinationSPOPSRANDMEMBERkeySREMkeymember1SUNIONkey1SUNIONSTOREdestinationkey1所有給定集合的并集在destination集合SSCANkeycursor[MATCHpattern][COUNTRedis有序集合(sortedRedis有序集合和集合一樣也是string類型元素的集合,doubleredis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行232-1 ,每個(gè)集合可40多億個(gè)成員)實(shí)redisredis:6379>ZADDrunoobkey1redis:6379>ZADDrunoobkey2redis:6379>ZADDrunoobkey3redis:6379>ZADDrunoobkey3redis:6379>ZADDrunoobkey4redis:6379>ZRANGErunoobkey010ZADDredisRedis有序集合命redis有序集合的基本命令命令1ZADDkeyscore1member1[score22ZCARD3ZCOUNTkeymin4ZINCRBYkeyincrement5ZINTERSTOREdestinationnumkeyskey[key計(jì)算給定的一個(gè)或多個(gè)有序集的交集并將結(jié)果集在新的有序集合key6ZLEXCOUNTkeymin7ZRANGEkeystartstop8ZRANGEBYLEXkeyminmax[LIMIToffset9ZRANGEBYSCOREkeyminmax[WITHSCORES]ZRANKkeyZREMkeymember[memberZREMRANGEBYLEXkeyminZREMRANGEBYRANKkeystart移除有序集合中給定的區(qū)間的所有成ZREMRANGEBYSCOREkeyminZREVRANGEkeystartstopZREVRANGEBYSCOREkeymaxminZREVRANKkeyZSCOREkeyZUNIONSTOREdestinationnumkeyskey[key計(jì)算給定的一個(gè)或多個(gè)有序集的并集,并在新的keyZSCANkeycursor[MATCHpattern][COUNTRedis哈希Redishash是一個(gè)string類型的field和value的映射表,hash特別適合用于對象Redis中每個(gè)hash可以232-1鍵值對(40多億)實(shí):6379>:6379>HMSETrunoobkeyname"redis:6379>HGETALL"redis"redisbasiccommandsforhsetkeymapHeyredis的一些描述信息(namedescriptionlikesvisitors)到哈希表runoobkey中。Redishash命redishash1命令HDELkeyfield22HEXISTSkeykey3HGETkey獲取在哈希表中指定字段的值4key5HINCRBYkeyfieldkeyincrement6HINCRBYFLOATkeyfieldkeyincrement7HKEYS8HLEN9HMGETkeyfield1HMSETkeyfield1value1[field2value2field-value域-值)keyHSETkeyfieldkeyfieldvalueHSETNXkeyfieldfieldHSCANkeycursor[MATCHpattern][COUNTJavaRedis<!--<!--/artifact/redis.clients/jedis--publicpublicclassTestRedis{privateJedispublicvoidsetup()jedisnewJedis("00",6379);}* 字符publicvoidtestString() 添加數(shù)jedis.set("name","xinxin");//向key-->name中放入了value--System.out.println(jedis.get("name"));//執(zhí)行結(jié)果jedis.append("nameismylover拼jedis.del("name");//刪除某個(gè)//設(shè)置多個(gè)鍵值 jedis.incr("age");//進(jìn)行加1操作System.out.println(jedis.get("name")+"-"+jedis.get("age")+"-"+}*redis操作publicvoidtestMap() 添加數(shù)Map<String,String>map=newHashMap<String,String>();map.put("name","xinxin");map.put("age","22"); //取出user中的name,執(zhí)行結(jié)果:[minxr]-->注意結(jié)果是一個(gè)泛型的List<String>rsmap=jedis.hmget("user","name","age","qq");System.out.println(jedis.hmget("user","age"));//因?yàn)閯h除了,所以返回的是System.out.println(jedis.hlen("user"));//返回key為user的鍵中存放的值的個(gè)數(shù)System.out.println(jedis.exists("user"));//是否存在key為user的記錄返回System.out.println(jedis.hkeys("user"));//返回map對象中的所有System.out.println(jedis.hvals("user"));//返回map對象中的所有Iterator<String>iter=jedis.hkeys("user").iterator();while(iter.hasNext()){Stringkey=}}*jedis操作publicvoidjedis.del("javaframework");System.out.println(jedis.lrange("javaframework",0,-//先向keyjavaframework中存放三條數(shù)據(jù)jedis.lpush("javaframework","spring");jedis.lpush("javaframework","struts");jedis.lpush("javaframework","hibernate");//再取出所有數(shù)據(jù)jedis.lrange是按范圍取出//第一個(gè)是key,第二個(gè)是起始位置,第三個(gè)是結(jié)束位置,jedis.llen獲取長度-1表示取得所System.out.println(jedis.lrange("javaframework",0,-jedis.del("javaframework");jedis.rpush("javaframework","spring");jedis.rpush("javaframework","struts");jedis.rpush("javaframework","hibernate");System.out.println(jedis.lrange("javaframework",0,-}*jedis操作publicvoid//移除//移除System.out.println(jedis.sismember("user","who"));//判斷who是否是user}publicvoidtest()throwsInterruptedException//jedisSystem.out.println(jedis.lrange("a",0,-1));//[9,3,6,1]System.out.println(jedis.sort("a1,36,9]//System.out.println(jedis.lrange("a",0,-}publicvoidtestRedisPool(){RedisUtil.getJedis().set("newname","中文測試");}SpringBoot集成###Redis(RedisConfiguration)###Redis(RedisConfiguration)Java代publicclassRedisService{privateStringRedisTemplatepublicvoidsetObject(Stringkey,Objectvalue)this.setObject(key,value,}publicvoidsetObject(Stringkey,Objectvalue,Longtime)if(StringUtils.isEmpty(key)||value==null)}if(valueinstanceofString)存放string類StringstringValue=(String)ifif(time==null)stringRedisTemplate.opsForValue().set(key,}else}}if(valueinstanceofList)List<String>listValue=(List<String>)for(Stringstring:listValue){stringRedisTemplate.opsForList().leftPush(key,string);}}}publicvoiddelKey(Stringkey){}publicStringgetString(Stringkey)return}}Redis主linux克隆虛擬生成新的mack地主從配redis主從1、redis的功能是支持多個(gè)數(shù)據(jù)庫之間的數(shù)據(jù)同步。一類是主數(shù)據(jù)庫(master)2、通過redis的功能可以很好的實(shí)現(xiàn)數(shù)據(jù)庫的讀寫分離,提高服務(wù)器的負(fù)載能力。主從過程:見下間接收到令緩存起來3:當(dāng)快照完成后,redis會將快照文件和所有緩存令發(fā)送給從數(shù)據(jù)庫4:從數(shù)據(jù)庫收到后,會載入快照文件并執(zhí)行收到的緩存令slaveredisredis.confmasterauth123456---主redis服務(wù)器配置了,則需要配Redis哨兵機(jī)什么是哨兵機(jī)Redis(sentinel)Redis 提醒(Notification):當(dāng)被的某個(gè)Redis出現(xiàn)問題時(shí),哨兵(sentinel)可以通過API向管理自動故障遷移(Automaticfailover):當(dāng)一個(gè)Master不能正常工作時(shí),哨兵(sentinel)會開始一次自動故障遷移操作,它會將失效Master的其中一個(gè)Slave升級為新的Master,并讓失效Master他Slave改為新的Master;當(dāng)客戶端試圖連接失效的Master時(shí),集群也會向客戶端返回新Master的地址,MasterMaster。哨兵(sentinel)(sentinel)SlaveMaster.著,如果發(fā)現(xiàn)對方在指定時(shí)間(可配置)內(nèi)未回應(yīng),則暫時(shí)認(rèn)為對方已掛(所謂的”認(rèn)為宕機(jī)”SubjectiveDown,sdown).若“哨兵群”中的多數(shù)sentinel,都報(bào)告某一master沒響應(yīng),系統(tǒng)才認(rèn)為該master"徹底"(即:客觀上的真正down機(jī),ObjectiveDown,簡稱odown),通過一定的vote算法,從剩下的slave節(jié)點(diǎn)中,選一臺master,然后自動修改相關(guān)配置.雖然哨兵(sentinel)redis-sentinelRedisRedissentinel(sentinel).哨兵(sentinel)的一些設(shè)計(jì)思路和zookeeper非常類似哨兵模式修改配cpsentinel.confsentinel.confsentinelmonitormymast3363791#主節(jié)點(diǎn)名稱IP端次sentinelauth-passmymaster修改心跳檢測5000sentineldown-after-millisecondsmymastersentinelparallel-syncsmymaster2./redis-server/usr/local/redis/etc/sentinel.conf--sentinelRedis事Redis事Redis實(shí)中,最后由EXEC命令觸發(fā)事務(wù),一并執(zhí)行事務(wù)中的所有命令:redisredis:6379>MULTIredis:6379>SETbook-name"MasteringC++in21days"redis:6379>GETbook-nameredis:6379>SADDtag"C++""Programming""MasteringSeries"redis:6379>SMEMBERSredisredis:6379>"MasteringC++in211)"MasteringRedis事務(wù)命redis命令1234WATCHkey5WATCHkey[key監(jiān)視一個(gè)(或多個(gè))key,如果在事務(wù)執(zhí)行之前這個(gè)(或這些)key被其令所改動,那么事務(wù)將被打斷Redis持久什么Redis持久RedisRedis持久化(AOF與RDB兩種模式RDB持久優(yōu)點(diǎn):使用單獨(dú)子進(jìn)程來進(jìn)行持久化,主進(jìn)程不會進(jìn)行任何IO操作,保證了redis缺點(diǎn):RDBredisredisnmkeyRDBRedis的所有數(shù)據(jù),一次快照數(shù)據(jù)。所有這個(gè)持久化方法也通常叫做snapshots。RDB默認(rèn)開啟,redis.conf#dbfilename#dbfilename:持久化數(shù) 在本地的文dbfilename下在當(dāng)前dir##snapshot觸發(fā)的時(shí)機(jī)##可以通過“save“””來關(guān)閉snapshot功能#save時(shí)間,以下分別表示更改了1key時(shí)間隔900s進(jìn)行持久key60s進(jìn) ;更改了10key300s進(jìn)save900save300save60##當(dāng)snapshot時(shí)出現(xiàn)錯(cuò)誤無法繼續(xù)時(shí),是否阻塞客戶端“變更操作”,“錯(cuò)誤”可能因?yàn)榇疟P已滿/磁盤故障/OS級別異常stop-writes-on-bgsave-error##是否啟用rdb“yes”“額外的cu消耗”pressionAOF持久Append-onlyfile,appendserverreplayAOFmysqlbin.log、apache.log、zookeepertxn-logAOFfile1s,redis1sredis-check-aofAOFrewrite前(文件過大時(shí)會對命令進(jìn)行合并重寫),可以刪除其中的某些命令(比如誤操作的flushall)。缺點(diǎn):AOF文件比RDB我們可以簡單的認(rèn)為AOF就是日志文件,此文件只會記錄“變更操作”(例如:set/del等),如果serverAOFserver的操作記錄是可以拋棄的;因?yàn)锳OF持久化模式還伴生了“AOFrewrite”。AOFAOFAOFserveraofredis久化中有aof,那么在server故障失效后再次啟動前,需要檢測aof文件的完整性。AOF默認(rèn)關(guān)閉,開啟方法,修改配置文件reds.conf:appendonly####aof功能的開關(guān),默認(rèn)為“no”,可以通過“yes”aof##只有在“yes”下,aof重寫/appendonly##aofappendfilename##aof操作中文件同步策略,有三個(gè)合法值:alwayseverysecno,appendfsync##aof-rewrite期間,appendfsync是否暫緩文件同步,"no"表示“不暫緩”,“yes”表no-appendfsync-on-rewrite##aof文件rewrite觸發(fā)的最小文件尺寸(mb,gb),只有大于此aof文件大于此尺寸是才會觸發(fā)rewrite,默認(rèn)“64mb”,建議“512mb”auto-aof-rewrite-min-size##相對于“上一次”rewriterewriteaof##rewrite之后,redis都會記錄下此時(shí)“aof”文件的大小(A)A*(1+p)##rewriteaofaofauto-aof-rewrite-percentageAOFserverIOlinux對文件操作采取了“延遲寫入”即并非每次write操作都會觸發(fā)實(shí)際磁盤操作而是進(jìn)入了bufferbufferlinuxbuffer條或者多條aof記錄的丟失。通過上述配置文件,可以得知redis提供了3中aof記錄同步選項(xiàng):是IO開支較大。務(wù)器故障,有可能導(dǎo)致最近一秒內(nèi)aof記錄丟失(可能為部分丟失)。no:redisbuffer失量會因OS配置有關(guān)。AOFAOFAOFrewrite操作就是“壓縮”AOF文件的過程,當(dāng)然redis并沒有采用“基于原aof文件”來重寫的snapshotcopy-on-writeaofAOFrewrite*rewrit
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024發(fā)布網(wǎng)絡(luò)廣告協(xié)議
- 仿寫:高新技術(shù)產(chǎn)業(yè)合作開發(fā)合同
- 二手設(shè)備購銷合同范本示例
- 房產(chǎn)交易資金代付協(xié)議書
- 工程拆遷安置合同范本
- 2024年合同延期協(xié)議補(bǔ)充協(xié)議
- 無需擔(dān)保的施工合同范本
- 魚塘養(yǎng)殖土地租賃合同
- 2024年物業(yè)授權(quán)管理合同范本
- 家庭室內(nèi)裝飾裝修工程合同
- 壓力管道材料等級表
- 三年級數(shù)學(xué)上冊 加號、減號的來源課外拓素材 冀教版 素材
- 《狼和小羊》PPT課件.ppt
- 神明—EZflame火焰檢測系統(tǒng)
- 新《固廢法》解讀(專業(yè)版)
- 個(gè)人簡歷求職簡歷課件.ppt
- 副神經(jīng)節(jié)瘤圖文.ppt
- 業(yè)務(wù)流程繪制方法IDEF和IDEFPPT課件
- (完整版)垃圾自動分揀機(jī)構(gòu)PLC控制畢業(yè)設(shè)計(jì).doc
- 小學(xué)四年級音樂課程標(biāo)準(zhǔn)
- 我的一次教研經(jīng)歷
評論
0/150
提交評論