深入淺出Redis

来源:http://www.cnblogs.com/shsxt/archive/2017/11/20/7866051.html
-Advertisement-
Play Games

一、Redis的誕生 Redis創建者,出生於西西里島的義大利人(antirez)發明的,個人網站,http://invece.org。早年是系統管理員,2004-2006 年做嵌入式方面的工作,之後接觸 WEB,2007 年和朋友共同創建了一個網站 LLOOGG.com,併為瞭解決這個網站的負載問 ...


一、Redis的誕生

 Redis創建者,出生於西西里島的義大利人(antirez)發明的,個人網站,http://invece.org。早年是系統管理員,2004-2006 年做嵌入式方面的工作,之後接觸 WEB,2007 年和朋友共同創建了一個網站 LLOOGG.com,併為瞭解決這個網站的負載問題而在 2009 年發明瞭 Redis。有關大數據數據倉庫問題,請看《傳統資料庫和數據倉庫》

說到這個 LLOOGG.com 網站,我們來看看這個到底是個幹嘛的網站,LLOOGG.com網站是一個訪客信息追蹤網站,網站可以通過 javascript 腳本,將訪客的 IP 地址、所屬國家、閱覽信息、訪問頁面地址等數據傳送給 LLOOGG.com。
 
 
 
三個網站正在向 LLOOGG.com 發送它們的訪客瀏覽記錄
然後 LLOOGG.com 會將這些瀏覽數據通過 WEB 頁面實時地展示給用戶,並存儲起來最新的 5 到 10000 條瀏覽記錄以便進行查閱,就是說用戶可以設置想看最近的多少條。
 

 
這個就是 LLOOGG.com 的用戶界面,ps:Google 的 Analytics知道 2011 年才有了實時功能,所以說 LLOOGG.com 的實時反饋想法在當時 2007 年還是很有新意的。
LLOOGG 的運作方式
比如說這裡有三個網站,為了記錄每個被追蹤網站的瀏覽信息,LLOOGG.com 需要為每個被追蹤的網站創建一個列表(list),每個列表需要根據用戶的設置,儲存最新的 5到10000 條瀏覽記錄
各個網站發送的瀏覽記錄會分別進入相應的隊列


 
FIFO 機制,當列表的長度超過用戶指定的最大長度時,程式每向列表推入一條記錄,就需要從列表中彈出一條最舊的記錄,圖中展示比如用戶設置列表最大長度為 5
LLOOGG 怎麼引起負載問題的呢?

隨著 LLOOGG 的用戶越來越多,LLOOGG 要維護的列表數量也越來越多,要執行的推入和彈出操作也越來越多,當時 LLOOGG 當時使用 MYSQL 資料庫,而每次 MYSQL執行推入和彈出操作都要進行硬碟寫入和讀取,程式的性能嚴重受制於硬碟 I/O,很多操作都堆在那裡,然後網站整個就沒法運作了。
這個負載問題的根本原因就是這個硬碟 IO,所以 antirez 在不改變硬體的基礎上,通過提升列表操作的性能來解決負載問題,決定自己寫一個具有列表結構的記憶體資料庫原型。最重要的是數據存儲在記憶體而不是硬碟,所以程式的性能不會受到硬碟 IO 限制,可以以極快的速度執行針對列表的堆入和彈出操作。結果試驗,確實解決了 LLOOGG 當時
的負載問題,於是 antirez 使用 C 語言重寫了這個記憶體資料庫,並給它加上了持久化功能,這個就是 Redis 的誕生!

二、Redis特點

世界上有無數種資料庫,為什麼要使用 Redis 呢,我們來看看它的優點

2.1獨特的鍵值對模型

我們知道很多資料庫只能處理一種數據結構:
      SQL資料庫----二維表格
      Memcached----鍵值對資料庫,鍵值都是字元串
文檔資料庫(CouchDB、MongoDB)----由 JSON/BSON 組成的文檔
當然不是他們這些資料庫不好,而是一旦資料庫提供的數據結構並不適合去做某件事的話,程式寫起來就會非常的麻煩和不自然。

2.2數據結構豐富

Redis 雖然也是鍵值對資料庫,但是和 Memcached 不同的是,Redis 支持多種類型的數據結構,不僅可以是字元串,同時還提供散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)等數據結構。
  
通過選用不同的數據結構,用戶可以使用 Redis 解決各式各樣的問題。
資料庫有兩種,一種硬碟資料庫,一種記憶體資料庫

硬碟是把值儲存在硬碟,典型的是 SQL 資料庫
 
在記憶體裡面就存儲一下索引,當硬碟資料庫想訪問硬碟的值時,它先在記憶體裡面找到索引,然後在找值,問題是什麼,在讀取和寫入硬碟的時候,如果讀寫比較多的時候,它會把硬碟 IO 堵死。
至於記憶體資料庫,它會直接把值放到記憶體裡面,記憶體資料庫就直接把值取到,風一樣的感覺,讀寫數據的時候都不會受到硬碟 IO 速度的限制,所以速度極快。

2.3數據的持久化

Redis支持數據的持久化,可以將記憶體中的數據保持在磁碟中,重啟的時候可以再次載入進行使用。

2.4數據的備份

Redis支持數據的備份,即master-slave模式的數據備份。 接下來,歡迎繼續閱讀我的文章《Redis安裝與實際應用》  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • strong和copy是常用到的修飾符,那麼什麼時候用strong,什麼時候用copy,先上一段代碼再說(以下代碼直接在ViewController中寫); 先定義兩個數組 viewDidLoad方法 列印結果 可以看到arraystrong隨著arrayMut的改變而改變了,而arraycopy沒 ...
  • Android 如何將手機屏幕投影到 PC 屏幕上或者投影儀上做演示? 公司開發款APP,要給領導演示,總不能用手機面對面演示吧。所以找了好久,找到一款體驗超好的: Total Control-幫助你使用電控制手機(自行下載,精簡版免費)。 其實這個軟體主要是用來用電腦來操控手機屏幕的,功能強大,也 ...
  • 隨著二手車交易市場呈爆髮式增長,二手車估值需要詳細瞭解車輛的狀況和維修歷史,車架號/vin碼是車輛唯一的身份標識,也是瞭解二手車車況的入口。手機掃描vin碼識別技術給車輛估值平臺提供了便捷的查詢入口,通過構建車況自動化查詢平臺,滿足車商隨時隨地查詢車況的需求。技術交流:187 016 868 57 ...
  • 效果如圖,很常見的一種佈局方式,只是沒有採用radiobutton,方法都很多,很多人都自定義寫在一個view裡面,不過代碼量偏大,所以還是xml寫吧 這樣寫下來感覺代碼量還是挺少的,而且很好擴展,然後在點擊的時候加了個回彈動畫,頓時體驗好多了 public class MainActivity e ...
  • 你全量發佈了一個新版本應用,怎麼在商戶的大面積投訴之前,率先發現閃退趨勢呢? 如果商戶投訴設備運行緩慢,你怎麼分析性能瓶頸呢?坐高鐵到現場嗎? ...
  • [20171120]關於INBOUND_CONNECT_TIMEOUT設置.txt--//上午翻看以前我的發的帖子,發現鏈接:http://www.itpub.net/thread-2066758-1-1.html--//今天再仔細看了一下,註意看了一下別人的回覆,才發現一些細節問題,原始鏈接:-- ...
  • 1.數值四捨五入,小數點後保留2位 round() 函數是四捨五入用,第一個參數是我們要被操作的數據,第二個參數是設置我們四捨五入之後小數點後顯示幾位。 numeric 函數的2個參數,第一個表示數據長度,第二個參數表示小數點後位數。 示例如下: ...
  • 環境描述:主redis:192.168.10.1 6379從redis:192.168.10.2 6380 一、主從配置 1、將主從redis配置文件redis.conf中的aemonize no 改為 yes 2、修改從redis配置文件redis.conf中的port 6379 改為 6380, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...