這篇文章主要介紹redis有哪些用途及優(yōu)缺點(diǎn),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
目前成都創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、武鄉(xiāng)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
業(yè)界常用MySQL+Memcached這樣的存儲架構(gòu),但是隨著訪問量的不斷攀蛇,隨之而來的問題也有很多。
1、MySQL需要不停的拆庫拆表,Memcached也需要跟著不斷擴(kuò)容;
2、Memcached與MySQL之間存在著一定的數(shù)據(jù)不一致的現(xiàn)象;
3、如果Memcached容易命中率變低,直接穿透到MySQL,導(dǎo)致數(shù)據(jù)庫無法支撐;
說起Redis,很多開發(fā)者都只知道它和Memcached一樣是非關(guān)系型數(shù)據(jù)庫,可以直接存儲K-V形式的數(shù)據(jù),但是相比起Memcached來說,他也有很多不同的地方。
1、Redis不僅僅只支持簡單的K-V形式的數(shù)據(jù)存儲,還支持list、set、hash、zset等等集合類數(shù)據(jù)的存儲;
2、Redis支持實(shí)時(shí)的數(shù)據(jù)備份,及時(shí)宕機(jī),也可以把數(shù)據(jù)恢復(fù)過來;
3、Redis支持?jǐn)?shù)據(jù)的持久化,可以存放在內(nèi)存memory中的數(shù)據(jù)直接保存在磁盤上;
String、Hash、Set、List、SortedSet、pub/sub、Transactions。
1、String:Strings就是一個(gè)最最簡單的Key-Value形式存儲的變量。其中Value既可以是數(shù)字也可以是字符串。其實(shí)現(xiàn)方式是在Redis內(nèi)部默認(rèn)存儲一個(gè)字符串,被redisObject引用,當(dāng)檢測到數(shù)字操作如自增自減incr、decr等等命令時(shí),自動(dòng)轉(zhuǎn)化為數(shù)字進(jìn)行計(jì)算,計(jì)算完畢后再轉(zhuǎn)化為String存儲起來。
2、Hash:Hash存儲是鍵值對的value。即Key-Hash,而Hash又是一個(gè)k-v的結(jié)構(gòu),如果使用的Memcached,則需要把整個(gè)Hash打包存儲在內(nèi)存中,如果需要查詢其中某個(gè)值,還要全部取出整個(gè)Hash,再查找對應(yīng)值。而Redis可以直接通過命令獲取到Value,大大提高了性能。 其實(shí)現(xiàn)原理:當(dāng)成員較少時(shí),Redis為了節(jié)約內(nèi)存會采用類似一維數(shù)組的緊湊存儲,而當(dāng)對象較多時(shí),則直接轉(zhuǎn)為HashMap存儲。
3、Set:Set是一個(gè)無序的天然去重的集合,即Key-Set。此外還提供了交集、并集等一系列直接操作集合的方法,對于求共同好友、共同關(guān)注什么的功能實(shí)現(xiàn)特別方便。其底層是靠HashMap實(shí)現(xiàn)的,其中value為null;
4、List:List是一個(gè)有序可重復(fù)的集合,其遵循FIFO的原則,底層是依賴雙向鏈表實(shí)現(xiàn)的,因此支持正向、反向雙重查找。通過List,我們可以很方面的獲得類似于最新回復(fù)這類的功能實(shí)現(xiàn)。
5、SortedSet:類似于java中的TreeSet,是Set的可排序版。此外還支持優(yōu)先級排序,維護(hù)了一個(gè)score的參數(shù)來實(shí)現(xiàn)。其底層主要依賴HashMap來實(shí)現(xiàn)的,通過維持插入的數(shù)值和Score優(yōu)先級的映射來進(jìn)行排序。
6、pub/sub:發(fā)布訂閱,類似于消息隊(duì)列mq??梢赃x擇對某個(gè)Key進(jìn)行訂閱,一旦這個(gè)key發(fā)布了一些消息,則所有訂閱了這個(gè)Key的對象就可以收到這個(gè)消息。主要可以用在實(shí)時(shí)消息系統(tǒng)上,例如聊天之類的。
7、Transactions:NOSQL不支持事務(wù),但是通過提供了打包執(zhí)行的功能,即這個(gè)包里面的所有命令必須要一起執(zhí)行,此外還可以鎖定某個(gè)Key,在打包執(zhí)行命令時(shí)如果檢測到這個(gè)Key發(fā)生了變化,則直接回滾。
redis使用內(nèi)存提供存儲,通過持久化功能保存數(shù)據(jù)。且針對request是單線程操作。這一系列特點(diǎn)使得redis具有十分神奇的功能。
1、查找最新的回復(fù)。
如果在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,這就需要使用select * from table where name="" order by time desc limit 100;這十分消耗數(shù)據(jù)庫性能,但是通過Redis,就可以直接在Redis里面通過Id創(chuàng)建一個(gè)List,指定長度1w,當(dāng)需要查找時(shí),直接輸出該list的后100條記錄。
2、排行問題
常見的排行問題,例如最熱話題、游戲排名等等,這些都可以通過Redis來輕松實(shí)現(xiàn),直接使用ZRank即可得到。
3、刪除過期數(shù)據(jù)
Redis不是真正意義上的可持久化數(shù)據(jù)庫,可以給數(shù)據(jù)加上一個(gè)有效時(shí)間,在有效時(shí)間超過時(shí),Redis會自動(dòng)刪除對應(yīng)數(shù)據(jù)。
以上是Redis有哪些用途及優(yōu)缺點(diǎn)的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!