深入瞭解Redis的效能_Redis

來源:互聯網
上載者:User

簡介

多少次你發現自己在幾個月的開發和無數的努力後陷入了毫無效能而言的web應用?多少次你在好奇如果你無法向普通使用者傳達快與最快的標準,你的客戶還應該把你當作專家?多少你聽到有關Google和Facebook一些糟糕的對比?讓我告訴你,我的客戶是怎麼看待這些的:

我曾開發一個有著複雜處理和過濾的web應用,因為很多商務規則和UI要求。再加上一些過時技術的第三方提供者,對於他們而言,速度意味著15年的工作丟進垃圾桶,然後重新開始。我的應用程式不是那麼快,有時處理一個請求花費6~8s才會處理完,商務規則的驗證、過濾和格式化響應。而客戶不接受這樣。並說如果Google做就會做好。同樣,Facebook也行。我無法向客戶解釋速度後面的硬體是多麼的龐大,伺服器的壓力怎樣。我僅僅回複說可以做更好,我在記住Redis後保證可以做到。


那麼,在我們深入Redis之前,我先介紹下NoSql。

大多數開發人員習慣用關係型資料庫。資料驅動開發或者領域驅動開發(作為一個整體架構編碼或者用Fluent API NHibernate),關係型資料庫的概念一樣。另一方面,NoSql引領了新的資料存放區時尚。在.NET社區最流行的是MongoDb,RavenDb和Redis。我已經寫了一篇怎麼使用MongDb的文章,你可以在這裡找到。我使用它記錄重要活動、錯誤和異常等的日誌。

在NoSql的世界裡,概念和所有流行的資料庫基本是一樣的。基本上它是存在你機器上某處的JSon文檔或者你可以操作的某種.NET客戶機或驅動。NoSql的偉大之處在於它解決了關係型資料庫與OO語言如C#或Java時的一個主要缺點:錯配阻抗。


Redis其實和任何的NoSql資料庫一樣。但是它是一個記憶體資料庫而表現十分出色。

簡單的說,Redis可以給你難以置信的存取你的對象狀態的能力從而使你的應用更加快速。有時候,你的應用速度可以最佳化8到10倍。這並不是開玩笑的而且你不需要背後有Google或Facebook那樣的基礎設施。如果你想知道更多的關於Redis背後的思想和它的曆史的內容,可以上網尋找更多。有很多文章是關於這些的。

Redis代表了遠程字典服務( Remote Dictionary Service) 。它是一個KVStore for Redis就像C#的字典對象。所以讓我們看看如何使用:


首先,按照下面的步驟安裝並運行Redis:

  •     開啟redis.io,下載win64版本的redis(它並不會根據你的系統指定相應的版本)
  •     將下載的內容複寫到Redis檔案夾(你也可以命名為其他你喜歡的名字)
  •     點擊 redis-server.exe 啟動服務端
  •     點擊 redis-client.exe 運行用戶端命令列工具
  • 現在我們試著運行一些基本的命令來檢測安裝是否正確。在用戶端命令列介面:
  •     輸入 set azul "hello world" 來添加一條記錄,你會收到ok的反饋。這意味著你已經添加了一個鍵為azul值為"hello world"的條目(順便說下,azul在卡拜爾語中是問候的意思)
  •     輸入 get azul取得相應的值,你會收到反饋 hello world
  •     輸入 delete azul會刪除這個條目

因為Redis是一個字典,可以以如下方式儲存索引值:
 

複製代碼 代碼如下:
Set schedule:1 "{'origin':'Montreal','destination':'Toronto'}"

在這個樣本中的值是一個json對象。這意味著你可以向Redis中添加複雜的對象。但沒必要這麼做,因為Redis支援5種資料類型以滿足你的需求。

你也可以以如下方式指定key:
 

複製代碼 代碼如下:
Set schedule:id 1

對於執行多個set 和get,可以使用mset 和mget來代替。我將不再對這些命令進行討論。你可以查看Redis文檔並盡情嘗試。

幕後

到目前為止我們所做的一切都打破了常規。但在幕後卻是Redis用戶端通過Redis協議向伺服器發送指令。伺服器對記憶體中的資料執行這些指令,並返迴響應結果。
做為服務的Redis

你可以在物理機,虛擬機器上使用Redis,也可以將Redis做為雲端服務。很多像Digital Ocean和Widnows Azure這類的供應商都提供該服務。我們將從Digital Ocean開始(主要考慮到價錢,並且我認為Azure的Redis服務有點貴)


我們使用PuTTY的ssh(安全連線模式)來串連到Digital Ocean。下載PuTTY並將IP地址配置為你的DO droplet地址(droplet是你在DO上建立的linux主機)。然後啟動PuTTY並用DO提供的root賬戶和密碼登入。運行以下命令以保持你的linux主機的更新:apt-get update (linux使用者現在很激動吧).

現在你正在或已經保持更新了。然後運行apt-get install build-essential為你的linux伺服器安裝所有缺失的工具。哦了。另外對於這些設定還有很多更詳細的博文。我不得不承認,因為我對linux世界不太熟悉,所以在配置的時候著實費了翻手腳。

在 Visual Studio 中使用

在起始頁,添加一個MVC項目,並使用Nuget包管理器添加Servicestack.redis。這樣你就可以串連到Redis並做一些有意思的事。

你需要按以下步驟做來串連Redis並被取得緩衝的對象列表。
 

using(IRedisClient client = RedisClient) {  var scheduleClient= client.GetTypedClient<Schedule>();  var schedules = scheduleClient.GetAll(); }

哪怕你緩衝了很多個物件這也是一個非常快速的操作。在Redis中緩衝即用的對象是很好的想法,這免去了可能的業務處理操作(應用規則或其他過濾和格式化操作).

資料庫中重複提取的對象(很多時候是相同的)最好放到Redis中。通常我們要在倉庫中緩衝的資料(更多細節請瀏覽緩衝倉庫模式cached repository pattern)也最好放到Redis中。這樣你就可以快速取得操作結果,大幅提升Web應用的整體效能。


注意scheduleClient將會暴露很多有關增加、添加、移除和使用列表、雜湊等的函數。嘗試下探索更多。。。

你也可以設定你的Redis用戶端來看一下(不是用Glimpse-;))在添加monitor command的這種情況下發生了什麼(在我們開始時添加azul的同一個地方)。

在完整的反HelloWorld應用風格(我承認我是其中之一!)的勇士興奮的跳向天空之前,我還應該提醒一件事:從你的控制器連到你的資料庫(就是Redis!)不是個好主意,如果這對你來說很奇怪,我認為你需要讀一些關於設計和架構方面的東西。我不理解Microsoft的指導書讓使用者添加一個MVC項目,你就可以開始構建一耳光偉大的商業web應用了。因為不是這樣。


然而,下面是一個添加對象的例子,在這個情況下式一個調度器:

 

//domain object public class Schedule  {  public int Id {get; set;}  public string Origin {get; set;}  public string Destination {get; set;} }   using(IRedisClient client = RedisClient) {  var scheduleClient= client.GetTypedClient<Schedule>();  var schedule= new Schedule  {    Id= scheduleClient.GetNextSequence(),    Origin ="Montreal",    Destination = "Quebec" }  var schedules = scheduleClient.Store(schedule); }

因為Redis是一個快取服務,是可以通過設定一個逾時時間讓輸入到期。你也可以通過移除那個逾時來逆向這個過程。

這僅是一個關於Redis的簡介,給你提供一個提高web引用效能的方法啟示。在某些情況下,Redis可能會給你一些你的客戶或者老闆沒有給你的,關於構建可靠軟體的激情的認可。

希望這能幫到一些人!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.