{eval=Array;=+count(Array);}
簡(jiǎn)單地說(shuō),Redis是一個(gè)高性能的key-value數(shù)據(jù)庫(kù),常用于搭建緩存系統(tǒng),提高并發(fā)響應(yīng)速度。典型的數(shù)據(jù)讀取流程:
string(字符串)、list(鏈表)、set(集合)、zset(sorted set有序集合)和hash(哈希類(lèi)型)。
push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。
提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶(hù)端,使用很方便。
可以集群化部署,數(shù)據(jù)從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步。
以Java + Spring Boot為例:
Redis 非關(guān)系型數(shù)據(jù)庫(kù)簡(jiǎn)介
Redis是一款開(kāi)源的、高性能的一個(gè)第三方軟件,就是一個(gè)key-value存儲(chǔ)系統(tǒng)。它常被稱(chēng)作是一款數(shù)據(jù)結(jié)構(gòu)服務(wù)器(data structure server)。Redis的鍵值可以包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等數(shù)據(jù)類(lèi)型。對(duì)于這些數(shù)據(jù)類(lèi)型,你可以執(zhí)行原子操作。例如:對(duì)字符串進(jìn)行附加操作(append);遞增哈希中的值;向列表中增加元素;計(jì)算集合的交集、并集與差集等。
redis是一種Nosql數(shù)據(jù)庫(kù),Nosql全稱(chēng)是Not Only SQL,是一種不同于關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理系統(tǒng)設(shè)計(jì)方式。對(duì)NoSQL最普遍的解釋是“非關(guān)系型的”,強(qiáng)調(diào)Key-Value 存儲(chǔ)和文檔數(shù)據(jù)庫(kù)的優(yōu)點(diǎn),而不是單純的反對(duì)RDBMS.
為了獲得優(yōu)異的性能,Redis采用了內(nèi)存中數(shù)據(jù)集(dataset)的方式。根據(jù)使用場(chǎng)景的不同,你可以每隔一段時(shí)間將數(shù)據(jù)集轉(zhuǎn)存到磁盤(pán)上來(lái)持久化數(shù)據(jù),或者在日志尾部追加每一條操作命令。
Redis同樣支持主從復(fù)制(master-slave replication),并且具有非常快速的非阻塞首次同步(non-blocking first synchronization)、網(wǎng)絡(luò)斷開(kāi)自動(dòng)重連等功能。同時(shí)Redis還具有其它一些特性,其中包括簡(jiǎn)單的check-and-set機(jī)制、pub/sub和配置設(shè)置等,以便使得Redis能夠表現(xiàn)得更像緩存(cache)。
Redis還提供了豐富的客戶(hù)端,如ServiceStack.Redis,以便支持現(xiàn)階段流行的大多數(shù)編程語(yǔ)言。詳細(xì)的支持列表可以參看Redis官方文檔:http://redis.io/clients。Redis自身使用ANSI C來(lái)編寫(xiě),并且能夠在不產(chǎn)生外部依賴(lài)(external dependencies)的情況下運(yùn)行在大多數(shù)POSIX系統(tǒng)上,例如:Linux、*BSD、OS X和Solaris等。
redis是一種Nosql數(shù)據(jù)庫(kù),Nosql全稱(chēng)是Not Only SQL,是一種不同于關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理系統(tǒng)設(shè)計(jì)方式。對(duì)NoSQL最普遍的解釋是“非關(guān)系型的”,強(qiáng)調(diào)Key-Value 存儲(chǔ)和文檔數(shù)據(jù)庫(kù)的優(yōu)點(diǎn),而不是單純的反對(duì)RDBMS.
Redis是一個(gè)開(kāi)源的內(nèi)存中數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),用作數(shù)據(jù)庫(kù),緩存和消息代理。R
edis支持各種數(shù)據(jù)結(jié)構(gòu),例如哈希,字符串,列表,集合,位圖,超級(jí)日志,帶范圍查詢(xún)的排序集,帶半徑查詢(xún)的地理空間索引以及流。它具有LRU逐出,Lua腳本,內(nèi)置復(fù)制,事務(wù)以及磁盤(pán)持久性的不同階段。這樣可以通過(guò)Redis Sentinel以及在Redis Cluster的幫助下進(jìn)行自動(dòng)分區(qū)來(lái)提供高可用性。
知道如何使用Redis的個(gè)人可以執(zhí)行許多操作,例如增加哈希值;附加到字符串;計(jì)算集交集;聯(lián)合與差異;將元素推到列表中,或在排序集中收集排名最高的成員。
為了獲得出色的性能,Redis使用內(nèi)置的內(nèi)存數(shù)據(jù)集進(jìn)行操作。
根據(jù)用例,可以通過(guò)不時(shí)將數(shù)據(jù)集轉(zhuǎn)儲(chǔ)到磁盤(pán)一次或?qū)⒚總€(gè)命令附加到日志來(lái)保持相同。如果需要網(wǎng)絡(luò)化,功能豐富的內(nèi)存中緩存,則可以輕松禁用持久性。
Redis甚至支持瑣碎的設(shè)置主從異步復(fù)制,以及非常快速的非阻塞同步,自動(dòng)重新連接以及netsplit上的部分重新同步。
Redis用ANSI C語(yǔ)言編寫(xiě),并且可以在大多數(shù)POSIX系統(tǒng)(例如BSD,Linux,OS X)中使用,而沒(méi)有任何外部依賴(lài)關(guān)系。OS X和Linux被認(rèn)為是Redis開(kāi)發(fā)和測(cè)試最多的兩個(gè)操作系統(tǒng),而Linux已用于部署Redis。Redis可以在Solaris派生的系統(tǒng)(例如SmartOS)中運(yùn)行,但是盡最大努力提供支持。
不幸的是,沒(méi)有為Windows構(gòu)建提供官方支持,但是Microsoft為Redis開(kāi)發(fā)并維護(hù)了Win-64端口。在2019年,Redis慶祝成立10周年。Redis的其他重要功能如下:
1. 高級(jí)數(shù)據(jù)結(jié)構(gòu)。Redis為值提供了五個(gè)可能的數(shù)據(jù)選項(xiàng)。這些是散列,列表,集合,字符串和排序集合。給出了這些數(shù)據(jù)類(lèi)型特有的操作,并附帶了有據(jù)可查的時(shí)間復(fù)雜性(Big O表示法)。
2. 高效的性能。由于其內(nèi)存特性,項(xiàng)目經(jīng)理致力于確保將復(fù)雜性保持在最低限度的承諾以及基于事件的編程模型,因此該應(yīng)用程序擁有出色的讀寫(xiě)性能。
3. 極其輕巧且無(wú)依賴(lài)性。Redis用ANSI C語(yǔ)言編寫(xiě),并且沒(méi)有外部依賴(lài)性。該程序在所有POSIX環(huán)境中均能完美運(yùn)行。Redis尚未正式支持Windows平臺(tái),但是Microsoft已為該平臺(tái)提供了一個(gè)實(shí)驗(yàn)性構(gòu)建。
4. 高可用性 。Redis具有對(duì)非阻塞,異步,主/從復(fù)制的內(nèi)置支持,以確保高級(jí)別的數(shù)據(jù)可用性。當(dāng)前有一個(gè)名為Redis Sentinel的高可用性解決方案,目前可以使用,但仍被認(rèn)為是一個(gè)進(jìn)行中的項(xiàng)目。
因此,現(xiàn)在開(kāi)始使用Redis時(shí),可能會(huì)問(wèn)為什么要使用Redis,或者與其他同類(lèi)產(chǎn)品相比,使用Redis有什么用?好吧,毫無(wú)疑問(wèn),Redis是其其他競(jìng)爭(zhēng)對(duì)手之外的佼佼者。但是,使它與眾不同的是它的創(chuàng)造和工作效率。下面提到的是一些為什么至少要嘗試Redis的最重要原因。
1. 超快的速度。Redis極快!這是因?yàn)樗怯肅語(yǔ)言編寫(xiě)的。
2. NoSQL數(shù)據(jù)庫(kù)。Redis是NoSQL數(shù)據(jù)庫(kù)。
3. 流行用法。目前,Redis已被Pinterest,Snapchat,GitHub,微博,Digg,StackOverflow,Craigslist和Flickr等許多技術(shù)巨頭使用。
4. 對(duì)緩存有用。為了保護(hù)云數(shù)據(jù)庫(kù)調(diào)用并因此節(jié)省一些資金,人們可以選擇通過(guò)Redis進(jìn)行緩存。
5.對(duì)開(kāi)發(fā)人員友好。Redis對(duì)開(kāi)發(fā)人員友好。目前,大多數(shù)語(yǔ)言都支持它。這是使用這種開(kāi)源技術(shù)的巨大優(yōu)勢(shì)。諸如C,C ++,C#,JavaScript,Java,Go,Objective-C,Python,PHP等語(yǔ)言以及幾乎所有著名語(yǔ)言都支持Redis。
Redis的簡(jiǎn)單性、異常快的性能以及對(duì)數(shù)據(jù)結(jié)構(gòu)的原子操作,為解決與傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)一起實(shí)施時(shí)遇到的難題或執(zhí)行不力的問(wèn)題提供了自己的解決方案。由于Redis的通用性,它們的一些流行應(yīng)用如下:
1. 隊(duì)列。Rescue等項(xiàng)目將Redis用于后端以對(duì)后臺(tái)作業(yè)進(jìn)行排隊(duì)。
2. 發(fā)布和訂閱。自2.0版發(fā)布以來(lái),Redis提供了使用發(fā)布/訂閱范式分發(fā)數(shù)據(jù)的功能。一些組織已經(jīng)轉(zhuǎn)移到Redis并離開(kāi)了其他消息隊(duì)列系統(tǒng)(例如RabbitMQ,zerm等),僅是因?yàn)镽edis的可靠性能和簡(jiǎn)單性。
3. 緩存。由于其高性能,當(dāng)讀寫(xiě)操作量超過(guò)傳統(tǒng)數(shù)據(jù)庫(kù)的功能時(shí),許多開(kāi)發(fā)人員已轉(zhuǎn)向Redis。與傳統(tǒng)的緩存解決方案相比,Redis具有將數(shù)據(jù)持久保存到磁盤(pán)的能力,因此被認(rèn)為是更好的選擇。
4. 計(jì)數(shù)器。原子命令(例如HINCRBY)為各種計(jì)數(shù)器的簡(jiǎn)單且線程安全的實(shí)現(xiàn)提供訪問(wèn)權(quán)限。形成計(jì)數(shù)器就像確定鍵名然后發(fā)出HINCRBY命令一樣容易。甚至在增加數(shù)據(jù)之前都沒(méi)有讀取數(shù)據(jù),甚至沒(méi)有數(shù)據(jù)庫(kù)方案可以更新。由于這些操作是原子操作,因此當(dāng)它們從多個(gè)應(yīng)用程序服務(wù)器訪問(wèn)時(shí),計(jì)數(shù)器將有助于保持一致性。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答