溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis有哪些用途及優(yōu)缺點(diǎn)

發(fā)布時間:2020-11-04 10:46:31 來源:億速云 閱讀:312 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章主要介紹Redis有哪些用途及優(yōu)缺點(diǎn),文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

1、Memcached和Redis相比的劣勢

業(yè)界常用MySQL+Memcached這樣的存儲架構(gòu),但是隨著訪問量的不斷攀蛇,隨之而來的問題也有很多。

1、MySQL需要不停的拆庫拆表,Memcached也需要跟著不斷擴(kuò)容;

2、Memcached與MySQL之間存在著一定的數(shù)據(jù)不一致的現(xiàn)象;

3、如果Memcached容易命中率變低,直接穿透到MySQL,導(dǎo)致數(shù)據(jù)庫無法支撐;

2、Redis的特點(diǎn)

說起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ù)據(jù)備份,及時宕機(jī),也可以把數(shù)據(jù)恢復(fù)過來;

3、Redis支持?jǐn)?shù)據(jù)的持久化,可以存放在內(nèi)存memory中的數(shù)據(jù)直接保存在磁盤上;

3、Redis常用的數(shù)據(jù)類型

String、Hash、Set、List、SortedSet、pub/sub、Transactions。

1、String:Strings就是一個最最簡單的Key-Value形式存儲的變量。其中Value既可以是數(shù)字也可以是字符串。其實(shí)現(xiàn)方式是在Redis內(nèi)部默認(rèn)存儲一個字符串,被redisObject引用,當(dāng)檢測到數(shù)字操作如自增自減incr、decr等等命令時,自動轉(zhuǎn)化為數(shù)字進(jìn)行計算,計算完畢后再轉(zhuǎn)化為String存儲起來。

2、Hash:Hash存儲是鍵值對的value。即Key-Hash,而Hash又是一個k-v的結(jié)構(gòu),如果使用的Memcached,則需要把整個Hash打包存儲在內(nèi)存中,如果需要查詢其中某個值,還要全部取出整個Hash,再查找對應(yīng)值。而Redis可以直接通過命令獲取到Value,大大提高了性能。 其實(shí)現(xiàn)原理:當(dāng)成員較少時,Redis為了節(jié)約內(nèi)存會采用類似一維數(shù)組的緊湊存儲,而當(dāng)對象較多時,則直接轉(zhuǎn)為HashMap存儲。

3、Set:Set是一個無序的天然去重的集合,即Key-Set。此外還提供了交集、并集等一系列直接操作集合的方法,對于求共同好友、共同關(guān)注什么的功能實(shí)現(xiàn)特別方便。其底層是靠HashMap實(shí)現(xiàn)的,其中value為null;

4、List:List是一個有序可重復(fù)的集合,其遵循FIFO的原則,底層是依賴雙向鏈表實(shí)現(xiàn)的,因此支持正向、反向雙重查找。通過List,我們可以很方面的獲得類似于最新回復(fù)這類的功能實(shí)現(xiàn)。

5、SortedSet:類似于java中的TreeSet,是Set的可排序版。此外還支持優(yōu)先級排序,維護(hù)了一個score的參數(shù)來實(shí)現(xiàn)。其底層主要依賴HashMap來實(shí)現(xiàn)的,通過維持插入的數(shù)值和Score優(yōu)先級的映射來進(jìn)行排序。

6、pub/sub:發(fā)布訂閱,類似于消息隊(duì)列mq。可以選擇對某個Key進(jìn)行訂閱,一旦這個key發(fā)布了一些消息,則所有訂閱了這個Key的對象就可以收到這個消息。主要可以用在實(shí)時消息系統(tǒng)上,例如聊天之類的。

7、Transactions:NoSQL不支持事務(wù),但是通過提供了打包執(zhí)行的功能,即這個包里面的所有命令必須要一起執(zhí)行,此外還可以鎖定某個Key,在打包執(zhí)行命令時如果檢測到這個Key發(fā)生了變化,則直接回滾。

4、Redis的常用應(yīng)用場景

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)建一個List,指定長度1w,當(dāng)需要查找時,直接輸出該list的后100條記錄。

2、排行問題

常見的排行問題,例如最熱話題、游戲排名等等,這些都可以通過Redis來輕松實(shí)現(xiàn),直接使用ZRank即可得到。

3、刪除過期數(shù)據(jù)

Redis不是真正意義上的可持久化數(shù)據(jù)庫,可以給數(shù)據(jù)加上一個有效時間,在有效時間超過時,Redis會自動刪除對應(yīng)數(shù)據(jù)。

以上是Redis有哪些用途及優(yōu)缺點(diǎn)的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI