深夜福利网-深夜福利网站大全,国产一区二区三区久久精品,99re6热在线精品视频播放,日韩中文字幕视频免费,影院一区二区小说性鲍视频

知名百科 >> Redis >> 歷史版本
編輯時(shí)間歷史版本內(nèi)容長(zhǎng)度圖片數(shù)目錄數(shù)修改原因
2024-04-29 11:03 最新歷史版本 9462 1 5
  返回詞條

Redis

Redis(Remote Dictionary Server,遠(yuǎn)程字典服務(wù))是一種快速、開(kāi)源、內(nèi)存數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)數(shù)據(jù)庫(kù)。Redis(Remote Dictionary Server,遠(yuǎn)程字典服務(wù))是一種快速、開(kāi)源、內(nèi)存數(shù)據(jù)結(jié)構(gòu)的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù)。它支持多種數(shù)據(jù)結(jié)構(gòu),包括字符串、、列表、集合、有序集合等,Redis可在多種操作系統(tǒng)上運(yùn)行,如Linux、BSD、Mac OS X等(官方不提供Windows操作系統(tǒng)的支持),并提供了多種客戶端庫(kù)。Redis最初由Salvatore Sanfilippo(名為“antirez”)使用ANSI C編寫(xiě),隨后Pieter Noordhuis加入了Redis的開(kāi)發(fā)和維護(hù),后來(lái)Salvatore Sanfilippo接受了VMWare等公司的贊助。

由于Redis中的數(shù)據(jù)存儲(chǔ)在內(nèi)存中,使得Redis最突出的特點(diǎn)是訪問(wèn)速度非???。同時(shí)Redis也支持持久化,可以將數(shù)據(jù)寫(xiě)入磁盤(pán),確保數(shù)據(jù)不會(huì)因?yàn)殄礄C(jī)而丟失。Redis還提供了一些高級(jí)功能,例如發(fā)布/訂閱、事務(wù)、Lua腳本和分布式鎖,并且Redis也支持集群模式,可以將數(shù)據(jù)分布在多個(gè)Redis節(jié)點(diǎn)中,以提高可用性和性能。由于Redis的高性能和豐富的功能,它被廣泛應(yīng)用于各種應(yīng)用場(chǎng)景,例如緩存、隊(duì)列、計(jì)數(shù)器、排行榜、實(shí)時(shí)消息系統(tǒng)等。

目錄

發(fā)展歷史  

初創(chuàng)階段

(2007年-2009年)

Redis的作者為Salvatore Sanfilippo(推特名為“antirez”),他在2007年和另一個(gè)朋友共同創(chuàng)建了訪客信息追蹤網(wǎng)站LLOOGG.com,該網(wǎng)站最初使用MySQL存儲(chǔ)用戶的瀏覽記錄,但隨著用戶量的增大,該網(wǎng)站的出現(xiàn)了嚴(yán)重的負(fù)載問(wèn)題,因此2009年2月26日Salvatore Sanfilippo發(fā)明了Redis。

VMware贊助階段

(2010年-2013年)

VMware公司從2010年開(kāi)始贊助Redis的開(kāi)發(fā),Salvatore Sanfilippo和Pieter Noordhuis也分別于同年的3月和5月加入VMware,全職開(kāi)發(fā)Redis。

Pivotal贊助階段

(2013年-2015年)

2013年5月至2015年6月,Salvatore Sanfilippo開(kāi)發(fā)Redis的工作由Pivotal贊助。

Redis Labs贊助階段

(2015年-2020年)

從2015年6月起,Redis的開(kāi)發(fā)由Redis Labs贊助,Redis Labs公司由Ofer Bengal于2011年成立,該公司于2021年更名“Redis”。同期Salvatore Sanfilippo加入Redis Labs。

Redis Ltd.贊助階段

(2020年-至今)

自2020年4月以來(lái),Redis Ltd.贊助了Redis的治理以及Redis官方網(wǎng)站redis.io的托管和維護(hù)。在Redis Ltd.贊助期間,2021年10月,“Redis之父”Salvatore Sanfilippo在Redis社區(qū)郵件列表上宣布隱退,不再繼續(xù)維護(hù)和開(kāi)發(fā)Redis。他在郵件中表示,他需要專(zhuān)注于個(gè)人事務(wù),并計(jì)劃在未來(lái)幾個(gè)月內(nèi)逐步退出開(kāi)發(fā)工作。Salvatore Sanfilippo的離開(kāi)引起了業(yè)界的關(guān)注和討論,但是Redis的開(kāi)發(fā)和維護(hù)團(tuán)隊(duì)表示會(huì)繼續(xù)致力于開(kāi)發(fā)和推進(jìn)Redis的發(fā)展。

優(yōu)點(diǎn)缺點(diǎn) 

優(yōu)點(diǎn)

高速讀寫(xiě):Redis采用內(nèi)存存儲(chǔ)、優(yōu)化的數(shù)據(jù)結(jié)構(gòu)、單線程模型、異步操作等技術(shù)手段,能夠快速高效地存儲(chǔ)和訪問(wèn)數(shù)據(jù),處理大量的并發(fā)請(qǐng)求,提高系統(tǒng)的性能和可靠性。以至于可以達(dá)到每秒幾十萬(wàn)次的讀寫(xiě)操作。

單線程模型:Redis采用單線程模型,每個(gè)請(qǐng)求都會(huì)在同一個(gè)線程中處理,避免了線程切換的開(kāi)銷(xiāo)。同時(shí),Redis使用異步I/O和事件驅(qū)動(dòng)模型,可以在處理請(qǐng)求時(shí)不阻塞其他請(qǐng)求的處理,提高了系統(tǒng)的并發(fā)性能。

多種數(shù)據(jù)結(jié)構(gòu)和操作:Redis支持多種數(shù)據(jù)結(jié)構(gòu)和操作,例如高效的哈希表、有序集合、位圖等,可以滿足各種數(shù)據(jù)存儲(chǔ)和查詢的需求。

集群模式:Redis支持分布式集群模式,可以水平擴(kuò)展,從而支持更高的并發(fā)和更大的數(shù)據(jù)存儲(chǔ)。

持久化存儲(chǔ):Redis支持多種持久化存儲(chǔ)方式,例如RDB(Redis Database)、AOF(Append Only File)和混合模式等。其中,RDB是將內(nèi)存中的數(shù)據(jù)定期寫(xiě)入磁盤(pán),而AOF是將每條寫(xiě)命令追加到一個(gè)日志文件中。這些持久化機(jī)制可以在不影響Redis性能的情況下保證數(shù)據(jù)的持久性和可靠性。

高可用性:Redis提供主從復(fù)制、Sentinel和Cluster等多種高可用性解決方案,可以保證系統(tǒng)的可用性和數(shù)據(jù)的安全性。

缺點(diǎn)

數(shù)據(jù)持久化問(wèn)題:Redis提供了將數(shù)據(jù)持久化到磁盤(pán)的功能,但是這種方式并不能完全保證數(shù)據(jù)的安全性。例如,如果在Redis執(zhí)行數(shù)據(jù)寫(xiě)入操作時(shí)系統(tǒng)崩潰或者Redis進(jìn)程意外停止,那么Redis最后一次快照或者AOF文件中保存的數(shù)據(jù)可能會(huì)丟失。雖然Redis支持在數(shù)據(jù)恢復(fù)時(shí)自動(dòng)加載最近一次的RDB或AOF文件,但這也只是能夠保證在文件保存時(shí)間點(diǎn)的數(shù)據(jù)恢復(fù),而不是Redis所有的歷史數(shù)據(jù)。

內(nèi)存限制:Redis高速讀寫(xiě)的性能是基于將所有數(shù)據(jù)存儲(chǔ)在內(nèi)存中進(jìn)行的。由于內(nèi)存資源是有限的,如果存儲(chǔ)的數(shù)據(jù)量過(guò)大,內(nèi)存可能會(huì)不夠用。Redis提供了多種策略,如LRU策略、最大內(nèi)存限制策略等,用于限制Redis占用內(nèi)存的大小,需要注意的是,如果數(shù)據(jù)量過(guò)大,僅依靠?jī)?nèi)存限制策略可能無(wú)法完全解決內(nèi)存限制問(wèn)題,但仍然可以使用Redis集群模式對(duì)數(shù)據(jù)進(jìn)行分散。

單線程限制:Redis的單線程架構(gòu)是其設(shè)計(jì)的一個(gè)重要特點(diǎn),也是其優(yōu)點(diǎn)之一,它使得Redis在讀寫(xiě)請(qǐng)求相對(duì)較少、數(shù)據(jù)量較小的情況下能夠達(dá)到非常高的性能表現(xiàn)。然而,在面對(duì)大量并發(fā)請(qǐng)求時(shí),由于Redis的單線程限制,可能會(huì)導(dǎo)致Redis的處理能力達(dá)到瓶頸,降低系統(tǒng)的性能。為了解決這個(gè)問(wèn)題,Redis使用了Redis Pipeline、Lua 腳本等方式來(lái)充分利用多核CPU的性能。盡管如此,在大量并發(fā)請(qǐng)求時(shí)Reids這個(gè)缺點(diǎn)仍然存在。

數(shù)據(jù)庫(kù)復(fù)制問(wèn)題:Redis數(shù)據(jù)庫(kù)復(fù)制功能可能會(huì)出現(xiàn)延遲,導(dǎo)致從服務(wù)器上的數(shù)據(jù)不一致。如果主服務(wù)器崩潰時(shí),從服務(wù)器上丟失的數(shù)據(jù)無(wú)法恢復(fù),可能會(huì)導(dǎo)致數(shù)據(jù)不一致和錯(cuò)誤行為。為了避免這種情況,需要設(shè)置合適的復(fù)制延遲閾值和拓?fù)浣Y(jié)構(gòu),選擇適當(dāng)?shù)某志没鎯?chǔ)方式,并結(jié)合業(yè)務(wù)需求和系統(tǒng)負(fù)載特點(diǎn),來(lái)保證Redis的高可用性特性。

不支持多個(gè)鍵的事務(wù):Redis是一個(gè)支持事務(wù)的鍵值存儲(chǔ)數(shù)據(jù)庫(kù),它可以將多個(gè)操作組成一個(gè)事務(wù),并保證這些操作要么全部執(zhí)行成功,要么全部失敗。但是,Redis事務(wù)只支持對(duì)單個(gè)鍵進(jìn)行操作,如果需要對(duì)多個(gè)鍵進(jìn)行操作,就需要使用Lua腳本或者Pipeline。

使用場(chǎng)景

Redis的高性能和多種特性,使其適合應(yīng)用于多種場(chǎng)景,包括緩存、計(jì)數(shù)器、消息隊(duì)列、分布式鎖、會(huì)話管理、排行榜等。在選擇Redis作為解決方案時(shí),需要結(jié)合具體應(yīng)用需求和場(chǎng)景,選擇合適的數(shù)據(jù)結(jié)構(gòu)和Redis特性。

緩存:Redis最常見(jiàn)的使用場(chǎng)景是作為緩存層。由于Redis存儲(chǔ)在內(nèi)存中,讀寫(xiě)速度非???,可以大大提高數(shù)據(jù)訪問(wèn)的速度和響應(yīng)時(shí)間。Redis還支持過(guò)期時(shí)間、LRU算法等緩存策略,可以更好地控制緩存大小和緩存命中率。

計(jì)數(shù)器:Redis的原子操作和高并發(fā)性能,使其適合用于計(jì)數(shù)器的場(chǎng)景。例如網(wǎng)站的訪問(wèn)量、點(diǎn)贊數(shù)、評(píng)論數(shù)等數(shù)據(jù),都可以使用Redis實(shí)現(xiàn)。Redis還支持多種計(jì)數(shù)器操作,包括遞增(INCR)、遞減(DECR)、獲取當(dāng)前計(jì)數(shù)值(GET)等。

消息隊(duì)列:Redis支持發(fā)布/訂閱機(jī)制,可以實(shí)現(xiàn)簡(jiǎn)單的消息隊(duì)列功能。例如可以將任務(wù)加入隊(duì)列,等待后續(xù)處理。同時(shí),Redis的高并發(fā)和高可用性,也適合用于實(shí)現(xiàn)大規(guī)模的消息隊(duì)列。

分布式鎖:Redis支持多種鎖機(jī)制,可以實(shí)現(xiàn)分布式鎖的場(chǎng)景。例如在分布式系統(tǒng)中,為了避免多個(gè)客戶端同時(shí)修改同一數(shù)據(jù),可以使用Redis的鎖機(jī)制來(lái)保證數(shù)據(jù)的一致性。

地理位置服務(wù) :Redis的地理位置功能可以用來(lái)存儲(chǔ)和查詢位置數(shù)據(jù)。這種功能可以用于各種位置相關(guān)的應(yīng)用場(chǎng)景,例如地圖服務(wù)、位置檢索和社交網(wǎng)絡(luò)等。

數(shù)據(jù)結(jié)構(gòu)

Redis支持多種數(shù)據(jù)結(jié)構(gòu),常用的數(shù)據(jù)結(jié)構(gòu)包括字符串(Strings)、哈希表(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)、流(Redis Streams)、地理空間(Redis geospatial)、超級(jí)日志(Redis HyperLogLog)、位圖(Redis bitmaps)、位字段(Redis bitfields)等。每種數(shù)據(jù)結(jié)構(gòu)都有不同的用途和優(yōu)勢(shì)。Redis通過(guò)多種數(shù)據(jù)結(jié)構(gòu)的組合和靈活運(yùn)用,可以實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)處理和存儲(chǔ)需求。在使用Redis時(shí),需要根據(jù)具體應(yīng)用場(chǎng)景和需求選擇合適的數(shù)據(jù)結(jié)構(gòu)。

字符串(Strings):Strings是Redis最基本的數(shù)據(jù)類(lèi)型,也是最常用的數(shù)據(jù)類(lèi)型之一。字符串可以存儲(chǔ)任何類(lèi)型的數(shù)據(jù),包括數(shù)字、文本、圖片等。Redis中的字符串支持高效的讀寫(xiě)操作,例如獲取字符串長(zhǎng)度、追加字符串、設(shè)置和獲取指定偏移量的子串等。

哈希表(Hashes):Hashes是Redis中的一種字典結(jié)構(gòu),可以存儲(chǔ)多個(gè)字段和值的映射關(guān)系。哈希表適合用于存儲(chǔ)對(duì)象,例如用戶信息、商品信息等。哈希表的讀寫(xiě)操作非常高效,可以通過(guò)鍵名和字段名快速獲取對(duì)應(yīng)的值。

列表(Lists):Lists是一種有序的字符串列表,支持在列表兩端插入或刪除元素,可以用于實(shí)現(xiàn)隊(duì)列、棧等數(shù)據(jù)結(jié)構(gòu)。列表支持高效的插入、刪除、查找操作,以及支持多種排序和范圍查詢方式。

集合(Sets):Sets是一種無(wú)序的字符串集合,支持添加、刪除、查找和求交集、并集、差集等操作。集合支持高效的添加、刪除、查找操作,以及支持多種集合運(yùn)算和排序方式。

有序集合(Sorted Sets):Sorted Sets是一種有序的字符串集合,每個(gè)元素都關(guān)聯(lián)著一個(gè)分?jǐn)?shù),可以用于實(shí)現(xiàn)排行榜、計(jì)數(shù)器等功能。有序集合支持高效的添加、刪除、查找、范圍查詢等操作,與Sets相比還支持多種排序方式。

流(Redis Streams):Redis Streams是一種數(shù)據(jù)結(jié)構(gòu),類(lèi)似于追加日志。可以使用Redis Streams實(shí)時(shí)記錄和同時(shí)傳輸事件,比如事件源,傳感器監(jiān)控和通知等。每個(gè)流入口都有一個(gè)唯一的ID,可以使用這個(gè)ID來(lái)檢索相關(guān)條目。Redis Streams支持多種削減策略(以防止流變得無(wú)限增長(zhǎng)),并支持多種消費(fèi)策略。

地理空間(Redis geospatial):Redis geospatial是Redis提供的一種用于存儲(chǔ)地理位置信息的數(shù)據(jù)類(lèi)型,允許開(kāi)發(fā)人員在Redis中存儲(chǔ)地理位置信息,并對(duì)這些信息進(jìn)行地理位置查詢。通過(guò)將地理位置數(shù)據(jù)存儲(chǔ)為經(jīng)度和緯度坐標(biāo)的有序集合,Redis提供了一系列基于地理位置查詢的命令,如添加地理位置數(shù)據(jù)、搜索附近的位置、計(jì)算距離等。這種數(shù)據(jù)類(lèi)型使得開(kāi)發(fā)人員能夠方便地實(shí)現(xiàn)諸如位置服務(wù)、推薦系統(tǒng)等應(yīng)用,同時(shí)具有高效和可擴(kuò)展性的特點(diǎn)。

超級(jí)日志(Redis HyperLogLog):Redis HyperLogLog是一種基數(shù)算法,用于估計(jì)集合中不同元素的數(shù)量。它通過(guò)使用非常小的內(nèi)存空間來(lái)實(shí)現(xiàn)這一目標(biāo),同時(shí)還提供了相對(duì)較高的精度。在Redis中,HyperLogLog通過(guò)使用單個(gè)字符串來(lái)實(shí)現(xiàn),并且支持添加元素、計(jì)算基數(shù)、合并多個(gè)HyperLogLog等操作。它在很多場(chǎng)景中都可以被使用,例如統(tǒng)計(jì)網(wǎng)站的獨(dú)立訪客數(shù)、統(tǒng)計(jì)搜索關(guān)鍵字的獨(dú)立數(shù)目等。

位圖(Redis bitmaps):Redis bitmaps用于存儲(chǔ)和操作二進(jìn)制位數(shù)組。它們非常適合于存儲(chǔ)和處理大量位,例如表示用戶在線狀態(tài)或網(wǎng)站流量分析。Redis提供了許多位操作命令,例如SETBIT、GETBIT和BITCOUNT,用于在位圖上進(jìn)行操作和計(jì)算。它還支持按位操作,例如AND、OR和XOR,這些操作可用于合并、比較和計(jì)算位圖之間的交集、并集和差異。

位字段(Redis bitfields):Redis bitfields允許在一個(gè)字符串中執(zhí)行位級(jí)別的操作。通過(guò)使用Redis bitfields,可以方便地對(duì)單個(gè)二進(jìn)制位進(jìn)行讀取、設(shè)置和清除操作,或者以不同大小的整數(shù)形式讀取或?qū)懭攵鄠€(gè)二進(jìn)制位。它通常用于存儲(chǔ)和操作二進(jìn)制數(shù)據(jù),例如壓縮數(shù)據(jù)、布隆過(guò)濾器和顏色編碼等。Redis bitfields提供了一組命令來(lái)處理位字段,包括GET、SET、INCRBY、OVERFLOW和NUMERIC等。

應(yīng)用案例

Twitter:Twitter使用Redis來(lái)存儲(chǔ)大量的實(shí)時(shí)數(shù)據(jù),包括用戶狀態(tài)、關(guān)系圖和推文。他們使用Redis的哈希數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)用戶信息,使用有序集合來(lái)存儲(chǔ)推文信息,以支持實(shí)時(shí)的數(shù)據(jù)查詢和分析。

RedisRedis

Snapchat:Snapchat使用Redis來(lái)存儲(chǔ)和處理用戶數(shù)據(jù)、實(shí)時(shí)消息和多媒體內(nèi)容等信息,以支持其快速增長(zhǎng)的用戶群體和高并發(fā)性能要求。

GitHub:GitHub使用Redis來(lái)存儲(chǔ)和緩存代碼倉(cāng)庫(kù)、用戶數(shù)據(jù)和API請(qǐng)求等信息,以提高響應(yīng)時(shí)間和可擴(kuò)展性。

Craigslist:Craigslist公司使用Redis作為他們的緩存數(shù)據(jù)庫(kù)來(lái)提高網(wǎng)站性能和響應(yīng)速度。他們使用Redis來(lái)緩存廣告數(shù)據(jù)、實(shí)現(xiàn)實(shí)時(shí)消息通知、實(shí)現(xiàn)基于地理位置的搜索和并發(fā)控制。這些功能可以幫助Craigslist提供更好的用戶體驗(yàn)和網(wǎng)站性能。

StackOverflow:StackOverflow公司使用Redis來(lái)實(shí)現(xiàn)多種功能,包括緩存用戶會(huì)話和登錄信息、實(shí)時(shí)通知和活動(dòng)更新、數(shù)據(jù)緩存和排名/計(jì)數(shù)器功能。

標(biāo)簽