為什么 Redis 為什么如此受歡迎

現(xiàn)在大多數(shù)開發(fā)人員都會(huì)聽說(shuō)過(guò) Redis。Redis 是目前市場(chǎng)上最好的開源內(nèi)存 NoSQL 數(shù)據(jù)庫(kù)之一。它為前端以及后端服務(wù)(如鍵值查找,隊(duì)列,哈希等)提供了非常多的幫助。

一、什么是 Redis?

根據(jù) Redis 官方介紹,Redis 是一個(gè)開源(BSD許可),內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),用作數(shù)據(jù)庫(kù),緩存和消息代理,它支持字符串、哈希表、列表、集合、有序集合、位圖、hyperloglogs 等數(shù)據(jù)類型。

二、Redis 與 Memcached

Redis 是一個(gè)數(shù)據(jù)結(jié)構(gòu)服務(wù)器。作為鍵值數(shù)據(jù)存儲(chǔ),Redis 類似于 Memcached,但它比 Memcached 有兩個(gè)主要優(yōu)點(diǎn):支持更多的數(shù)據(jù)類型以及持久化。

持久化使得你可以將 Redis 當(dāng)做合法數(shù)據(jù)庫(kù)進(jìn)行操作,而不是一個(gè)不穩(wěn)定的臨時(shí)緩存。如果重新啟動(dòng),Memcached 信息將丟失; 但 Redis 數(shù)據(jù)仍然存在。

Redis 支持存儲(chǔ)多種類型數(shù)據(jù)。跟 Memcached 一樣可以使用字符串。而且你還可以處理 hash(哈希),set(所有不同值的未排序),zset(所有不同值的排序)和 list(可能包括重復(fù)的排序)。

三、Redis 如何運(yùn)作?

數(shù)據(jù)庫(kù)將數(shù)據(jù)存儲(chǔ)在磁盤或 SSD 上,而 Redis 的數(shù)據(jù)是駐留在內(nèi)存中。由于無(wú)需訪問(wèn)磁盤,Redis 等內(nèi)存數(shù)據(jù)存儲(chǔ)避免了查找時(shí)間延遲,并且可以在幾微秒內(nèi)訪問(wèn)數(shù)據(jù)。Redis 提供多種數(shù)據(jù)結(jié)構(gòu)、高可用性、地理空間、Lua 腳本、事務(wù)、磁盤持久性和群集支持,讓實(shí)時(shí)互聯(lián)網(wǎng)級(jí)應(yīng)用程序的構(gòu)建變得更加簡(jiǎn)單。

四、Redis 持久化

現(xiàn)在可以通過(guò)兩種不同的方式實(shí)現(xiàn)持久性:一種稱為快照,是一種半持久性模式,指定的時(shí)間間隔內(nèi)生成數(shù)據(jù)集的時(shí)間點(diǎn)快照,以 RDB(Redis DataBase) 轉(zhuǎn)儲(chǔ)格式編寫。從版本1.1開始,有更安全的替代方案 AOF(Append Only File),它的出現(xiàn)是為了彌補(bǔ) RDB 的不足(數(shù)據(jù)的不一致性),采用日志的形式來(lái)記錄每個(gè)寫操作并追加在文件中。

五、RDB 和 AOF ,我應(yīng)該用哪一個(gè)?

一般來(lái)說(shuō),如果想達(dá)到足以媲美 PostgreSQL 的數(shù)據(jù)安全性, 你應(yīng)該同時(shí)使用 RDB 和 AOF 兩種持久化功能。

AOF 默認(rèn)情況下,Redis 每2秒將數(shù)據(jù)寫入文件系統(tǒng),根據(jù)需求設(shè)置時(shí)間。如果在默認(rèn)設(shè)置下系統(tǒng)出現(xiàn)故障,則只會(huì)丟失幾秒鐘的數(shù)據(jù)。如果你可以承受數(shù)分鐘以內(nèi)的數(shù)據(jù)丟失, 那么你可以只使用 RDB 持久化。

有很多人會(huì)單獨(dú)使用 AOF,但是我們并不鼓勵(lì)這樣,因?yàn)闀r(shí)常進(jìn)行 RDB 快照非常方便于數(shù)據(jù)庫(kù)備份,啟動(dòng)速度也較之快,還避免了AOF 引擎的 bug。

六、常見案例

緩存 - 由于其高性能,當(dāng)讀寫操作量超過(guò)傳統(tǒng)數(shù)據(jù)庫(kù)的功能時(shí),可以通過(guò) Redis 進(jìn)行解決。由于 Redis 能夠輕松的將數(shù)據(jù)持久保存到磁盤和豐富數(shù)據(jù)類型,因此它是傳統(tǒng) Memcached 緩存解決方案的絕佳替代方案。

發(fā)布和訂閱 - 從版本 2.0 開始,Redis 提供了使用發(fā)布/訂閱消息傳遞范例分發(fā)數(shù)據(jù)的功能。

隊(duì)列 - 像 Resque 這樣的項(xiàng)目使用 Redis 作為排隊(duì)后臺(tái)作業(yè)的后端。

游戲排行榜- Redis 是尋求構(gòu)建實(shí)時(shí)排行榜的游戲開發(fā)者的熱門選擇??芍苯邮褂?Redis 有序集數(shù)據(jù)結(jié)構(gòu),此結(jié)構(gòu)實(shí)現(xiàn)了元素的唯一性,同時(shí)又可維護(hù)按用戶分?jǐn)?shù)排序的列表。你也可以使用時(shí)間戳作為分?jǐn)?shù),使用有序集處理時(shí)間序列數(shù)據(jù)。

實(shí)時(shí)分析-Redis 可作為內(nèi)存中數(shù)據(jù)存儲(chǔ),與流處理平臺(tái)(例如 Apache Kafka)搭配使用,以亞毫秒級(jí)延遲提取、處理和分析實(shí)時(shí)數(shù)據(jù)。Redis 是實(shí)時(shí)分析使用案例的理想選擇,例如社交媒體分析、廣告投放、個(gè)性化。

七、示例 Redis 基本命令

下面我簡(jiǎn)單講解 Redis-CLI 基本命令操作,默認(rèn)情況下,Redis-CLI在端口 6379 上運(yùn)行。

SET (設(shè)置密鑰)

127.0.0.1:6379> SET foo "Hello World"
OK // 設(shè)置密鑰

GET (獲取密鑰)

127.0.0.1:6379> GET foo
"Hello World" // 獲取密鑰

DEL (刪除密鑰)

127.0.0.1:6379> GET foo 
"Hello World" 
127.0.0.1:6379> DEL foo
(integer) 1 // 密鑰剛被刪除
127.0.0.1:6379> GET foo
(nil) // 密鑰被刪除,結(jié)果為nil。

SETEX (設(shè)置有效期限的密鑰)

127.0.0.1:6379> SETEX foo 40 "I said, Hello World!"
OK //密鑰已設(shè)置為40秒到期

TTL (密鑰的剩余時(shí)間)

127.0.0.1:6379> TTL foo
(integer) 36 //36秒超時(shí)

PERSIST (密鑰刪除期限)

127.0.0.1:6379> PERSIST foo
(integer) 1 //將密鑰轉(zhuǎn)為持久化(密鑰不會(huì)過(guò)期)

RENAME (重命名當(dāng)前現(xiàn)有密鑰)

127.0.0.1:6379> RENAME foo bar
OK // 將鍵'foo'重命名為 'bar'

FLUSHALL (清空到目前為止保存的所有內(nèi)容)

127.0.0.1:6379> flushall
OK // 刪庫(kù)跑路

八、小結(jié)

Redis 有著極其豐富的數(shù)據(jù)類型和極高性能,性能上讀的速度是110000次/s,寫的速度是81000次/s 。但是 Redis 不是萬(wàn)能的,受到物理內(nèi)存的限制,不能用作海量數(shù)據(jù)的高性能讀寫,因此 Redis 適合的場(chǎng)景主要局限在較小數(shù)據(jù)量的高性能操作和運(yùn)算上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Redis高可用概述 在介紹Redis高可用之前,先說(shuō)明一下在Redis的語(yǔ)境中高可用的含義。 我們知道,在w...
    空語(yǔ)閱讀 1,679評(píng)論 0 2
  • 企業(yè)級(jí)redis集群架構(gòu)的特點(diǎn) 海量數(shù)據(jù) 高并發(fā) 高可用 要達(dá)到高可用,持久化是不可減少的,持久化主要是做災(zāi)難恢復(fù)...
    lucode閱讀 2,281評(píng)論 0 7
  • 1.1 資料 ,最好的入門小冊(cè)子,可以先于一切文檔之前看,免費(fèi)。 作者Antirez的博客,Antirez維護(hù)的R...
    JefferyLcm閱讀 17,320評(píng)論 1 51
  • Redis雜談 Redis是近年來(lái)發(fā)展迅速的內(nèi)存數(shù)據(jù)庫(kù),網(wǎng)上也已經(jīng)有多Redis的文章。但不管是英文還是中文,多數(shù)...
    迷失于重逢閱讀 1,710評(píng)論 0 14
  • 老大來(lái)開會(huì),弘揚(yáng)企業(yè)文化,喊口號(hào),正能量,雞血一波接一波,基本無(wú)感了。沒我反胃,也沒有暴躁,學(xué)會(huì)一點(diǎn)點(diǎn)抽離,看他是...
    隱基底的花園閱讀 290評(píng)論 0 0

友情鏈接更多精彩內(nèi)容