日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

簡介

redis(Remote Dictionary Server,遠程字典服務器)是一個開源的、高性能的鍵值對(key-value)存儲系統,是跨平臺的非關系型數據庫。

2008年,一款基于MySQL的網站實時統計系統——LLOOGG被正式推出。不久之后,Merzia公司由于不滿于這個系統的現有性能,于2009年為LLOOGG設計了一個全新的數據庫——Redis(第一個版本)。為了使Redis能夠應用到更多地方,其創始人在社區開源代碼,并與Redis另一名主要的代碼貢獻者共同開發著Redis。

2010年,VMware公司贊助Redis的開發,開發人員開始全職開發Redis。從2013年5月起,Pivotal成為Redis的主要贊助商。

根據Redis官網的最新介紹,Redis是一個開源(持有BSD許可)的、基于內存處理的數據結構存儲,用作數據庫存儲、緩存處理、消息代理和流引擎(Streaming Engine)。Redis的功能十分強大,在短短幾年的時間里,不僅獲得了龐大的用戶群體,還得到了大量程序員和IT公司的支持和推廣。

DB-Engines網站根據鍵值對存儲數據庫管理系統的受歡迎程度對它們進行排名,該排名結果每月更新一次。DB-Engines網站的鍵值對數據庫排名如下。

一文搞懂Redis鍵值對存儲數據庫

根據Stack Overflow年度開發人員的調查結果顯示,Redis連續4年獲得最受歡迎的鍵值對存儲數據庫的稱號。Redis是基于ANSI C語言編寫的,并且為開發者提供了多種語言的API,如C#、C++、GO、JAVA、php、Ruby、JavaScript、Perl、Python/ target=_blank class=infotextkey>Python等。伴隨著Redis的用戶越來越多,大部分的互聯網公司都開始使用Redis作為公共緩存。

特點

Redis作為熱門的NoSQL數據庫系統之一,提供了多種鍵值數據類型以適應不同場景下的存儲需求。Redis主要有以下6個特點。

1. 豐富的數據結構

Redis通常被稱為數據結構服務器,因為它不僅支持多種類型的數據結構,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合等,而且還可以通過Redis哨兵(Sentinel)和自動分區(Cluster)實現高可用性。

2. 內存存儲與持久化

Redis數據庫的所有數據都被加載到內存中進行操作或處理,由于內存的讀寫速度遠遠大于硬盤,因此Redis的數據讀寫速度及性能也比其他數據庫更加優秀,它每秒可以讀寫超過10萬個鍵值。

Redis的數據存儲在計算機內存中,為了能夠持久地使用Redis數據,防止系統故障造成數據丟失,可以將Redis中的數據異步寫入磁盤空間中,這個過程就叫做Redis持久化。Redis提供了兩種不同的持久化方法,一種是快照(RDB,Redis DataBase),另一種是追加文件(AOF,Append Only File)。

3. 支持事務

Redis的事務操作可以保證數據操作的原子性,即一個事務中的所有命令要么全部執行,要么全部不執行。如果其中任何一個命令執行失敗,整個事務將被回滾到之前的狀態。這種原子性保證了Redis的數據操作具有可靠性和一致性。

4. 支持主從復制

Redis支持主從復制構建集群,支持數據的備份。為了分擔讀取數據的壓力,Redis不僅支持主從同步,而且也支持一主多從以及多級從結構,其中主節點提供寫操作,從節點僅提供讀操作。對于“讀多寫少”的狀況,可為主節點配置多個從節點,從而提高響應效率。

(1) Redis主從同步實現過程

Redis主從數據的同步是異步進行的,主從同步存在一個狀態差,但不會影響主邏輯,也不會降低Redis的處理性能。

一文搞懂Redis鍵值對存儲數據庫

如圖2-2所示,Redis實現主從同步的過程大致可以分為以下6步。

① 從節點執行slaveof命令;

② 從節點保存slaveof命令中主節點的信息,不做其他操作;

③ 從節點內部的定時任務發現有主節點的信息,開始使用socket連接主節點;

④ 連接成功后,從節點向主節點發送ping命令,請求連接;

⑤ 如果主節點設置了權限,從節點需要進行權限驗證;如果驗證失敗,復制終止;權限驗證通過后,主從節點進行數據同步,主節點將全部數據全部發送至從節點,做一次完整備份;

⑥ 主從節點完成備份后,主節點將持續發送給從節點新的數據變動命令,從節點實時同步,保證主從數據一致性。

(1) Redis數據同步的過程

Redis 2.8版本之后,從服務器對主服務器的同步操作需要使用psync命令來實現,主從服務器在執行psync命令期間的通信過程如下。

一文搞懂Redis鍵值對存儲數據庫

參數說明:

1) runId:每個Redis節點啟動都會生成唯一的uuid,每次Redis重啟后,runId都會發生變化。

2) offset:主節點和從節點各自維護自己的主從復制偏移量offset,當主節點有寫入命令時,offset=offset+命令的字節長度。從節點在收到主節點發送的命令后,也會增加自己的offset,并把自己的offset發送給主節點。這樣,主節點同時保存自己的offset和從節點的offset,并通過對比offset來判斷主從節點數據是否一致。

發送psync命令的目的是讓從服務器與主服務器進行同步,以確保從服務器的數據與主服務器的數據保持一致。當從服務器發送psync命令后,主服務器可能會有以下3種響應情況。

1) FULLRESYNC:第一次連接,進行全量復制

2) CONTINUE:進行部分復制

3) ERR:不支持psync命令,進行全量復制

5. 功能豐富

Redis不僅是優秀的存儲數據庫,還擔任著其他角色,比如緩存系統、隊列系統等。

作為緩存系統,Redis為每個鍵設置生存時間(Time To Live,TTL),生存時間到期后鍵會自動被刪除,還可以限定數據占用的最大內存空間,在數據達到空間限制后按照一定的規則自動淘汰不需要的鍵。借助Redis出色的性能、豐富的數據類型及其特有的持久化,用戶可將Redis應用到更加寬廣、豐富的業務中去。

Redis是一個高性能的優先級隊列,它借助列表類型鍵實現隊列,支持阻塞時的讀取操作。除此之外,Redis還支持“發布/訂閱”的消息模式,可幫助用戶構建聊天室系統

6. 簡單穩定

Redis使用起來十分便捷,它提供了幾十種編程語言的客戶端庫。用戶可以使用命令操作Redis數據庫,實現讀寫數據,便于在程序中與Redis的交互。命令語句與Redis的關系相當于SQL語句與MySQL的關系。

Redis的開發代碼量僅3萬多行,并且開源,便于用戶通過修改Redis源代碼來適應自己的項目需求。同時,對于希望充分發揮數據庫性能的開發者而言,Redis也具有很大的吸引力。到目前為止,已有近百名開發者為Redis貢獻了代碼。在良好的開發氛圍和嚴謹的版本發布機制下,Redis穩定版本的性能更具可靠性。

應用場景

Redis 數據庫主要被大型企業、初創公司和政府組織用于以下場景:緩存、構建隊列系統、實時欺詐檢測、全球用戶會話管理、實時庫存管理、AI/ML功能存儲以及索賠處理。

Redis數據庫在內存中讀寫數據的容量受到物理內存的限制,不適用海量數據的高性能讀寫,再加上它缺少原生的可擴展機制,不具備可擴展能力,需要通過客戶端來實現分布式讀寫,因此Redis適合的場景主要局限在較小數據量的高性能操作和運算上。目前,國內的互聯網企業,如新浪微博和知乎,以及國外互聯網企業的產品,如Github、Stack Overflow、Flickr和Instagram,這些都是Redis的用戶。

常見用例包括以下6種。

1. 存儲數據庫

使用云數據庫Redis時,Redis作為持久化數據庫,主程序部署在ECS上,所有業務數據存儲在Redis中。云數據庫Redis版支持持久化功能,主備雙機冗余數據存儲,保證了服務的高可用性。適用場景為游戲網站及應用。

2. 緩存

Redis最常見的應用場景是作為緩存系統。它使用String類型來將序列化后的對象存儲到內存中。

Redis是單線程模型,而Memcached則支持多線程。應用在多核服務器上時,Redis的性能比Memcached要遜色一些。Redis的性能優異,通常情況下其性能不會成為服務的瓶頸。Redis將會很好地代替Memcached,成為熱點數據緩存的首選工具。

3. 消息隊列

Redis支持保存List鏈表和Set集合的數據結構,且支持對List進行各種操作。基于List來做FIFO雙向鏈表可實現一個輕量級的高性能消息隊列服務。常見的應用場景有12306網站的排隊購票業務和候補業務,電商網站的秒殺、搶購等業務。

4. 排行榜

Redis使用有序集合和一個計算熱度的算法,可以輕松地得到一個熱度排行榜。常見的應用場景有新聞頭條、微博熱搜榜、熱歌榜、游戲排行榜等。

5. 位操作

當需要處理上億數據量的情況時,可以考慮使用位操作。例如處理幾億用戶的簽到、去重登錄的統計、查詢用戶的在線狀態等場景。如果為每個用戶建立一個key,那么對于擁有十億用戶的騰訊來說,所需要的內存大小將難以想象。使用Redis的位操作命令,如setbit、getbit和bitcount,可以解決上述問題。可以在Redis內部構建一個足夠長的數組,每個數組的值為0或1。數組的下標(index)使用數字表示用戶ID。這樣,可以使用下標和元素值來記錄并存儲數億條記錄。

6. 計數器

Redis高效率讀寫的特點可以充分發揮其計數功能。Redis的數據結構中,String、hash等支持原子性的遞增操作,適用諸如統計點擊數應用。因為Redis是單線程,所以能夠避免并發問題,保證不會出錯,而且其100%毫秒級的性能,非常適用于高并發的秒殺活動、分布式序列號的生成、網站訪問統計等場景。

支持的數據結構

Redis以鍵值對的形式存儲數據,而value則支持多種數據類型,常見的數據結構有String(字符串)、List(列表)、Set(集合)、Hash(散列)和Sorted Sets(有序結合)。本節將詳細講解這5種數據結構。

1.String(字符串)

String類型是Redis最基本的數據類型,一個key對應一個value,String類型的value最大能存儲512MB。String的值是二進制類型的,具有較高的安全性,其值的數據類型可以為文本、圖片、視頻或者序列化的對象。

一文搞懂Redis鍵值對存儲數據庫

String數據結構多用于實現計數功能,例如掘金文章的點擊數量、閱讀數量、視頻觀看量、分布式鎖,也常用于集群環境下的session共享。

2.List(列表)

Redis列表是簡單的字符串列表,按照插入順序排序,最多可存儲2³²-1個元素。對列表進行讀寫操作時,只能添加或讀取一個元素到列表的頭部(左邊)或者尾部(右邊)。

一文搞懂Redis鍵值對存儲數據庫

GoodID為列表的鍵名,2022001、2022002、2022003和2022003都是列表中的鍵值。這些值均按照插入順序排列,分別為列表的第1個字符串元素、第2個字符串元素、第3個字符串元素、第4個字符串元素。另外,List允許出現重復的值,如該List中的第3個元素和第4個字符串元素都為2022003。

List數據結構可用于獲取最新的評論列表、最近N天的活躍用戶數、新聞推薦等。

3.Set(集合)

Set是字符串元素的無序集合。其中,字符串元素是不重復且無序的,集合最多可存儲2³²-1個元素。

一文搞懂Redis鍵值對存儲數據庫

Set類型與hash類型的存儲結構相同,僅存儲鍵,不存儲值(nil)。這是因為Set的內部實現是一個value永遠為null的HashMap。HashMap通過計算hash的方式來實現快速排重,這也是set能提供判斷一個成員是否在集合內的原因。Set的value和List的value類似,都是一個字符串列表,區別在于Set是無序的,且Set中的元素是唯一的。

利用Redis提供的Set數據結構可以存儲大量的數據,并且高效的內部存儲機制使其在查詢方面具有更高的工作效率。

Set可用于存儲一些集合性的數據,比如微博應用中,把一個用戶關注的人放在一個集合中,用戶的粉絲放到一個集合中,通過集合的交集、并集、差集等操作,實現共同關注,互相關注、可能認識的人等功能。除此之外,Set集合常用于限時抽獎活動、共同好友、商品篩選等場景。

4.Hash(散列)

Redis Hash是一個無序的鍵值(key-value)對集合。Redis本身就是key-value類型,此處的Hash數據結構指的是key-value中的value,正是因為如此,hash特別適合用于存儲對象。

一文搞懂Redis鍵值對存儲數據庫

Hash是一個字符串類型的key和value的映射表,其中存儲鍵的類型必須為字符串類型,值的類型可以是不可重復的字符串、數字等。

Hash使用哈希表結構實現數據存儲,一個存儲空間保存多個鍵值對數據,常應用于各種商城購物車如淘寶、京東等。

5.Sorted Sets(有序集合)

Sorted Sets是在Set的基礎上,為value中的每個字符串關聯了一個score(得分)屬性。Sorted Sets通過計算得分,將字符串進行排序,這也是有序集合與散列的主要區別。

一文搞懂Redis鍵值對存儲數據庫

有序集合允許直接操作值,散列則是通過鍵來查找值;有序集合的鍵是唯一的,值是不唯一的,而散列的值則是唯一的。有序集合是按照值的大小進行排序的,常用于各種排行榜,如百度新聞榜單、熱搜榜等。

分享到:
標簽:Redis
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定