欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入了解Redis的性能

 更新時間:2015年06月28日 11:42:01   投稿:goldensun  
這篇文章主要介紹了Redis的性能,作者通過Visual Studio上的C#程序?qū)ζ溥M行了分析,需要的朋友可以參考下

簡介

多少次你發(fā)現(xiàn)自己在幾個月的開發(fā)和無數(shù)的努力后陷入了毫無性能而言的web應(yīng)用?多少次你在好奇如果你無法向普通用戶傳達快與最快的標準,你的客戶還應(yīng)該把你當作專家?多少你聽到有關(guān)Google和Facebook一些糟糕的對比?讓我告訴你,我的客戶是怎么看待這些的:

我曾開發(fā)一個有著復(fù)雜處理和過濾的web應(yīng)用,因為很多業(yè)務(wù)規(guī)則和UI要求。再加上一些過時技術(shù)的第三方提供者,對于他們而言,速度意味著15年的工作丟進垃圾桶,然后重新開始。我的應(yīng)用不是那么快,有時處理一個請求花費6~8s才會處理完,業(yè)務(wù)規(guī)則的驗證、過濾和格式化響應(yīng)。而客戶不接受這樣。并說如果Google做就會做好。同樣,F(xiàn)acebook也行。我無法向客戶解釋速度后面的硬件是多么的龐大,服務(wù)器的壓力怎樣。我僅僅回復(fù)說可以做更好,我在記住Redis后保證可以做到。


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

大多數(shù)開發(fā)者習(xí)慣用關(guān)系型數(shù)據(jù)庫。數(shù)據(jù)驅(qū)動開發(fā)或者領(lǐng)域驅(qū)動開發(fā)(作為一個整體框架編碼或者用Fluent API NHibernate),關(guān)系型數(shù)據(jù)庫的概念一樣。另一方面,NoSql引領(lǐng)了新的數(shù)據(jù)存儲時尚。在.NET社區(qū)最流行的是MongoDb,RavenDb和Redis。我已經(jīng)寫了一篇怎么使用MongDb的文章,你可以在這里找到。我使用它記錄重要活動、錯誤和異常等的日志。

在NoSql的世界里,概念和所有流行的數(shù)據(jù)庫基本是一樣的?;旧纤谴嬖谀銠C器上某處的JSon文檔或者你可以操作的某種.NET客戶機或驅(qū)動。NoSql的偉大之處在于它解決了關(guān)系型數(shù)據(jù)庫與OO語言如C#或Java時的一個主要缺點:錯配阻抗。


Redis其實和任何的NoSql數(shù)據(jù)庫一樣。但是它是一個內(nèi)存數(shù)據(jù)庫而表現(xiàn)十分出色。

簡單的說,Redis可以給你難以置信的存取你的對象狀態(tài)的能力從而使你的應(yīng)用更加快速。有時候,你的應(yīng)用速度可以優(yōu)化8到10倍。這并不是開玩笑的而且你不需要背后有Google或Facebook那樣的基礎(chǔ)設(shè)施。如果你想知道更多的關(guān)于Redis背后的思想和它的歷史的內(nèi)容,可以上網(wǎng)查找更多。有很多文章是關(guān)于這些的。

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


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

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

因為Redis是一個字典,可以以如下方式保存鍵值:
 

復(fù)制代碼 代碼如下:
Set schedule:1 "{'origin':'Montreal','destination':'Toronto'}"

在這個示例中的值是一個json對象。這意味著你可以向Redis中添加復(fù)雜的對象。但沒必要這么做,因為Redis支持5種數(shù)據(jù)類型以滿足你的需求。

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

復(fù)制代碼 代碼如下:
Set schedule:id 1

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

幕后

到目前為止我們所做的一切都打破了常規(guī)。但在幕后卻是Redis客戶端通過Redis協(xié)議向服務(wù)器發(fā)送指令。服務(wù)器對內(nèi)存中的數(shù)據(jù)執(zhí)行這些指令,并返回響應(yīng)結(jié)果。
做為服務(wù)的Redis

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


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

現(xiàn)在你正在或已經(jīng)保持更新了。然后運行apt-get install build-essential為你的linux服務(wù)器安裝所有缺失的工具。哦了。另外對于這些設(shè)置還有很多更詳細的博文。我不得不承認,因為我對linux世界不太熟悉,所以在配置的時候著實費了翻手腳。

在 Visual Studio 中使用

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

你需要按以下步驟做來連接Redis并被取得緩存的對象列表。
 

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

哪怕你緩存了很多對象這也是一個非??焖俚牟僮鳌T赗edis中緩存即用的對象是很好的想法,這免去了可能的業(yè)務(wù)處理操作(應(yīng)用規(guī)則或其他過濾和格式化操作).

數(shù)據(jù)庫中重復(fù)提取的對象(很多時候是相同的)最好放到Redis中。通常我們要在倉庫中緩存的數(shù)據(jù)(更多細節(jié)請瀏覽緩存?zhèn)}庫模式cached repository pattern)也最好放到Redis中。這樣你就可以快速取得操作結(jié)果,大幅提升Web應(yīng)用的整體性能。


注意scheduleClient將會暴露很多有關(guān)增加、添加、移除和使用列表、哈希等的函數(shù)。嘗試下探索更多。。。

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

在完整的反HelloWorld應(yīng)用風(fēng)格(我承認我是其中之一?。┑挠率颗d奮的跳向天空之前,我還應(yīng)該提醒一件事:從你的控制器連到你的數(shù)據(jù)庫(就是Redis?。┎皇莻€好主意,如果這對你來說很奇怪,我認為你需要讀一些關(guān)于設(shè)計和架構(gòu)方面的東西。我不理解Microsoft的指導(dǎo)書讓用戶添加一個MVC項目,你就可以開始構(gòu)建一耳光偉大的商業(yè)web應(yīng)用了。因為不是這樣。


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

 

//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是一個緩存服務(wù),是可以通過設(shè)置一個超時時間讓輸入過期。你也可以通過移除那個超時來逆向這個過程。

這僅是一個關(guān)于Redis的簡介,給你提供一個提高web引用性能的方法啟示。在某些情況下,Redis可能會給你一些你的客戶或者老板沒有給你的,關(guān)于構(gòu)建可靠軟件的激情的認可。

希望這能幫到一些人!

相關(guān)文章

  • Redis連接超時異常的處理方法

    Redis連接超時異常的處理方法

    這篇文章主要給大家介紹了關(guān)于Redis連接超時異常的處理方法,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringSession+Redis實現(xiàn)集群會話共享的方法

    SpringSession+Redis實現(xiàn)集群會話共享的方法

    為了保證WEB應(yīng)用的承載能力, 需要對WEB應(yīng)用進行集群處理.這篇文章主要介紹了SpringSession+Redis實現(xiàn)集群會話共享的方法,需要的朋友參考下吧
    2018-08-08
  • 詳解三分鐘快速搭建分布式高可用的Redis集群

    詳解三分鐘快速搭建分布式高可用的Redis集群

    這篇文章主要介紹了詳解三分鐘快速搭建分布式高可用的Redis集群,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 分布式利器redis及redisson的延遲隊列實踐

    分布式利器redis及redisson的延遲隊列實踐

    這篇文章為大家主要介紹了分布式利器redis及redisson的延遲隊列實踐,搜遍全網(wǎng)好像還沒有使用redisson的延遲隊列的,redisson作為一個分布式利器,這么好用的工具沒人用有點可惜
    2022-03-03
  • 解鎖redis鎖的正確姿勢

    解鎖redis鎖的正確姿勢

    這篇文章主要為大家詳細介紹了解鎖redis鎖的正確姿勢,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Linux下redis5.0.5的安裝過程與配置方法

    Linux下redis5.0.5的安裝過程與配置方法

    這篇文章主要介紹了Linux下redis5.0.5的安裝過程與配置方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 使用RedisAtomicInteger計數(shù)出現(xiàn)少計問題及解決

    使用RedisAtomicInteger計數(shù)出現(xiàn)少計問題及解決

    這篇文章主要介紹了使用RedisAtomicInteger計數(shù)出現(xiàn)少計問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 利用Redis統(tǒng)計網(wǎng)站在線活躍用戶的方法

    利用Redis統(tǒng)計網(wǎng)站在線活躍用戶的方法

    Redis支持對String類型的value進行基于二進制位的置位操作。通過將一個用戶的id對應(yīng)value上的一位,通過對活躍用戶對應(yīng)的位進行置位,就能夠用一個value記錄所有活躍用戶的信息。下面這篇文章主要介紹了利用Redis統(tǒng)計網(wǎng)站在線活躍用戶的方法,需要的朋友可以參考。
    2017-01-01
  • Redis出現(xiàn)(error)NOAUTH?Authentication?required.報錯的解決辦法(秒懂!)

    Redis出現(xiàn)(error)NOAUTH?Authentication?required.報錯的解決辦法(秒懂!)

    這篇文章主要給大家介紹了關(guān)于Redis出現(xiàn)(error)NOAUTH?Authentication?required.報錯的解決辦法,對于 這個錯誤這通常是因為Redis服務(wù)器需要密碼進行身份驗證,但客戶端沒有提供正確的身份驗證信息導(dǎo)致的,需要的朋友可以參考下
    2024-03-03
  • 在K8s上部署Redis集群的方法步驟

    在K8s上部署Redis集群的方法步驟

    這篇文章主要介紹了在K8s上部署Redis集群的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評論